Bagikan melalui


Fungsi EncryptMessage (Umum)

Fungsi EncryptMessage (Umum) mengenkripsi pesan untuk memberikan privasi. EncryptMessage (Umum) memungkinkan aplikasi untuk memilih di antara algoritma kriptografi yang didukung oleh mekanisme yang dipilih. Fungsi EncryptMessage (Umum) menggunakan konteks keamanan yang dirujuk oleh handel konteks. Beberapa paket tidak memiliki pesan untuk dienkripsi atau didekripsi, melainkan memberikan hash integritas yang dapat diperiksa.

Saat menggunakan penyedia dukungan keamanan (SSP) Digest, fungsi ini hanya tersedia sebagai mekanisme SASL.

Saat menggunakan Schannel SSP, fungsi ini mengenkripsi pesan dengan menggunakan kunci sesi yang dinegosiasikan dengan pihak jarak jauh yang akan menerima pesan. Algoritma enkripsi ditentukan oleh [cipher suite](cipher-suites-in-schannel.md) yang digunakan.

Catatan

EncryptMessage (Umum) dan DecryptMessage (Umum) dapat dipanggil pada saat yang sama dari dua utas yang berbeda dalam konteks antarmuka penyedia dukungan keamanan tunggal (SSPI) jika satu utas mengenkripsi dan yang lain mendekripsi. Jika lebih dari satu utas mengenkripsi, atau lebih dari satu utas mendekripsi, setiap utas harus mendapatkan konteks unik.

Untuk informasi tentang menggunakan fungsi ini dengan SSP tertentu, lihat topik berikut.

Topik Deskripsi
EncryptMessage (Digest) Mengenkripsi pesan untuk memberikan privasi dengan menggunakan Digest.
EncryptMessage (Kerberos) Mengenkripsi pesan untuk memberikan privasi dengan menggunakan Kerberos.
EncryptMessage (Negosiasi) Mengenkripsi pesan untuk memberikan privasi dengan menggunakan Negosiasi.
EncryptMessage (NTLM) Mengenkripsi pesan untuk memberikan privasi dengan menggunakan NTLM.
EncryptMessage (Schannel) Mengenkripsi pesan untuk memberikan privasi dengan menggunakan Schannel.

Sintaks

SECURITY_STATUS SEC_Entry EncryptMessage(
  _In_    PCtxtHandle    phContext,
  _In_    ULONG          fQOP,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo
);

Parameter

phContext [in]

Handel ke konteks keamanan yang akan digunakan untuk mengenkripsi pesan.

fQOP [in]

Bendera khusus paket yang menunjukkan kualitas perlindungan. Paket keamanan dapat menggunakan parameter ini untuk mengaktifkan pemilihan algoritma kriptografi.

Saat menggunakan Digest SSP, parameter ini harus diatur ke nol.

Parameter ini bisa menjadi salah satu bendera berikut.

Nilai Makna
SECQOP_WRAP_NO_ENCRYPT
Menghasilkan header atau trailer tetapi tidak mengenkripsi pesan.
Catatan: KERB_WRAP_NO_ENCRYPT memiliki nilai yang sama dan makna yang sama.
SECQOP_WRAP_OOB_DATA
Kirim pesan pemberitahuan Schannel. Dalam hal ini, parameter pMessage harus berisi kode peristiwa SSL/TLS dua byte standar. Nilai ini hanya didukung oleh Schannel SSP.

pMessage [masuk, keluar]

Penunjuk ke struktur SecBufferDesc . Pada input, struktur mereferensikan satu atau beberapa struktur SecBuffer . Salah satunya bisa berjenis SECBUFFER_DATA. Buffer tersebut berisi pesan yang akan dienkripsi. Pesan dienkripsi di tempat, menimpa konten asli struktur.

Fungsi ini tidak memproses buffer dengan atribut SECBUFFER_READONLY.

Panjang struktur SecBuffer yang berisi pesan tidak boleh lebih besar dari cbMaximumMessage, yang diperoleh dari fungsi QueryContextAttributes (Umum) (SECPKG_ATTR_STREAM_SIZES).

Saat menggunakan Digest SSP, harus ada buffer kedua jenis SECBUFFER_PADDING atau SEC_BUFFER_DATA untuk menyimpan informasi tanda tangan . Untuk mendapatkan ukuran buffer output, panggil fungsi QueryContextAttributes (Umum) dan tentukan SECPKG_ATTR_SIZES. Fungsi akan mengembalikan struktur SecPkgContext_Sizes . Ukuran buffer output adalah jumlah nilai dalam anggota cbMaxSignature dan cbBlockSize .

Aplikasi yang tidak menggunakan SSL harus menyediakan SecBuffer jenis SECBUFFER_PADDING.

MessageSeqNo [in]

Nomor urut yang ditetapkan aplikasi transportasi ke pesan. Jika aplikasi transportasi tidak mempertahankan nomor urut, parameter ini harus nol.

Saat menggunakan Digest SSP, parameter ini harus diatur ke nol. Digest SSP mengelola penomoran urutan secara internal.

Saat menggunakan Schannel SSP, parameter ini harus diatur ke nol. Schannel SSP tidak menggunakan nomor urut.

Mengembalikan nilai

Jika fungsi berhasil, fungsi akan mengembalikan SEC_E_OK.

Jika fungsi gagal, fungsi mengembalikan salah satu kode kesalahan berikut.

Menampilkan kode Deskripsi
SEC_E_BUFFER_TOO_SMALL Buffer output terlalu kecil. Untuk informasi selengkapnya, lihat Keterangan.
SEC_E_CONTEXT_EXPIRED Aplikasi ini mereferensikan konteks yang telah ditutup. Aplikasi yang ditulis dengan benar seharusnya tidak menerima kesalahan ini.
SEC_E_CRYPTO_SYSTEM_INVALID Cipher yang dipilih untuk konteks keamanan tidak didukung.
SEC_E_INSUFFICIENT_MEMORY Tidak tersedia cukup memori untuk menyelesaikan tindakan yang diminta.
SEC_E_INVALID_HANDLE Handel konteks yang tidak valid ditentukan dalam parameter phContext .
SEC_E_INVALID_TOKEN Tidak ada buffer tipe SECBUFFER_DATA yang ditemukan.
SEC_E_QOP_NOT_SUPPORTED Kerahasiaan maupun integritas tidak didukung oleh konteks keamanan.

Keterangan

Fungsi EncryptMessage (Umum) mengenkripsi pesan berdasarkan pesan dan kunci sesi dari konteks keamanan.

Jika aplikasi transportasi membuat konteks keamanan untuk mendukung deteksi urutan dan pemanggil menyediakan nomor urut, fungsi menyertakan informasi ini dengan pesan terenkripsi. Termasuk informasi ini melindungi dari pemutaran ulang, penyisipan, dan penekanan pesan. Paket keamanan menggabungkan nomor urut yang diturunkan dari aplikasi transportasi.

Saat Anda menggunakan Digest SSP, dapatkan ukuran buffer output dengan memanggil fungsi QueryContextAttributes (Umum) dan menentukan SECPKG_ATTR_SIZES. Fungsi akan mengembalikan struktur SecPkgContext_Sizes . Ukuran buffer output adalah jumlah nilai dalam anggota cbMaxSignature dan cbBlockSize .

Ketika digunakan dengan Schannel SSP, parameter pMessage harus berisi struktur SecBufferDesc dengan buffer berikut.

Catatan

Buffer ini harus disediakan dalam urutan yang ditampilkan.

Jenis buffer Deskripsi
SECBUFFER_STREAM_HEADER Digunakan secara internal. Tidak diperlukan inisialisasi.
SECBUFFER_DATA Berisi pesan teks biasa yang akan dienkripsi.
SECBUFFER_STREAM_TRAILER Digunakan secara internal. Tidak diperlukan inisialisasi.
SECBUFFER_EMPTY Digunakan secara internal. Tidak diperlukan inisialisasi. Ukurannya bisa nol.

Saat Anda menggunakan Schannel SSP, tentukan ukuran maksimum setiap buffer dengan memanggil fungsi QueryContextAttributes (Umum) dan menentukan atribut SECPKG_ATTR_STREAM_SIZES. Fungsi ini mengembalikan struktur SecPkgContext_StreamSizes yang anggotanya berisi ukuran maksimum untuk header (anggota cbHeader ), pesan (anggota cbMaximumMessage ) dan buffer trailer (anggota cbTrailer ).

Untuk performa optimal, struktur pMessage harus dialokasikan dari memori yang berdekatan.

Windows XP/2000: Fungsi ini juga dikenal sebagai SealMessage. Aplikasi sekarang harus menggunakan EncryptMessage (Umum) saja.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Header
Sspi.h (termasuk Security.h)
Pustaka
Secur32.lib
DLL
Secur32.dll

Lihat juga