Bagikan melalui


Fungsi DecryptMessage (Umum)

Fungsi DecryptMessage (Umum) mendekripsi pesan. Beberapa paket tidak mengenkripsi dan mendekripsi pesan melainkan melakukan dan memeriksa hash integritas.

Penyedia dukungan keamanan (SSP) Digest menyediakan kerahasiaan enkripsi dan dekripsi untuk pesan yang dipertukarkan antara klien dan server hanya sebagai mekanisme SASL.

Fungsi ini juga digunakan dengan Schannel SSP untuk memberi sinyal permintaan dari pengirim pesan untuk negosiasi ulang (ulang) atribut koneksi atau untuk mematikan koneksi.

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
DecryptMessage (Digest) Mendekripsi pesan dengan menggunakan Digest.
DecryptMessage (Kerberos) Mendekripsi pesan dengan menggunakan Kerberos.
DecryptMessage (Negosiasi) Mendekripsi pesan dengan menggunakan Negosiasi.
DecryptMessage (NTLM) Mendekripsi pesan dengan menggunakan NTLM.
DecryptMessage (Schannel) Mendekripsi pesan dengan menggunakan Schannel.

 

Sintaks

SECURITY_STATUS SEC_Entry DecryptMessage(
  _In_    PCtxtHandle    phContext,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo,
  _Out_   PULONG         pfQOP
);

Parameter

phContext [in]

Handel ke konteks keamanan yang akan digunakan untuk mendekripsi pesan.

pMessage [masuk, keluar]

Penunjuk ke struktur SecBufferDesc . Pada input, struktur mereferensikan satu atau beberapa struktur SecBuffer . Salah satunya mungkin berjenis SECBUFFER_DATA. Buffer tersebut berisi pesan terenkripsi. Pesan terenkripsi didekripsi di tempatnya, menimpa konten asli buffernya.

Saat menggunakan Digest SSP, pada input, struktur mereferensikan satu atau beberapa struktur SecBuffer . Salah satunya harus berjenis SECBUFFER_DATA atau SECBUFFER_STREAM, dan harus berisi pesan terenkripsi.

Saat menggunakan Schannel SSP dengan konteks yang tidak berorientasi pada koneksi, pada input, struktur harus berisi empat struktur SecBuffer . Tepat satu buffer harus berjenis SECBUFFER_DATA dan berisi pesan terenkripsi, yang didekripsi di tempatnya. Buffer yang tersisa digunakan untuk output dan harus berjenis SECBUFFER_EMPTY. Untuk konteks berorientasi koneksi, buffer jenis SECBUFFER_DATA harus disediakan, sebagaimana dicatat untuk konteks berorientasi nonkoneksi. Selain itu, buffer jenis SECBUFFER_TOKEN kedua yang berisi token keamanan juga harus disediakan.

MessageSeqNo [in]

Nomor urut yang diharapkan oleh aplikasi transportasi, jika ada. Jika aplikasi transportasi tidak mempertahankan nomor urut, parameter ini harus diatur ke 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.

pfQOP [out]

Pointer ke variabel jenis ULONG yang menerima bendera khusus paket yang menunjukkan kualitas perlindungan.

Saat menggunakan Schannel SSP, parameter ini tidak digunakan dan harus diatur ke NULL.

Parameter ini bisa menjadi salah satu bendera berikut.

Nilai Makna
SECQOP_WRAP_NO_ENCRYPT
Pesan tidak dienkripsi, tetapi header atau trailer diproduksi.
Catatan: KERB_WRAP_NO_ENCRYPT memiliki nilai yang sama dan makna yang sama.
SIGN_ONLY
Saat menggunakan Digest SSP, gunakan bendera ini saat konteks keamanan diatur untuk memverifikasi tanda tangan saja. Untuk informasi selengkapnya, lihat Kualitas Perlindungan.

 

Menampilkan nilai

Jika fungsi memverifikasi bahwa pesan diterima dalam urutan yang benar, fungsi mengembalikan SEC_E_OK.

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

Menampilkan kode Deskripsi
SEC_E_BUFFER_TOO_SMALL
Buffer pesan terlalu kecil. Digunakan dengan Digest SSP.
SEC_E_CRYPTO_SYSTEM_INVALID
Cipher yang dipilih untuk konteks keamanan tidak didukung. Digunakan dengan Digest SSP.
SEC_E_INCOMPLETE_MESSAGE
Data dalam buffer input tidak lengkap. Aplikasi perlu membaca lebih banyak data dari server dan memanggil DecryptMessage (Umum) lagi.
SEC_E_INVALID_HANDLE
Handel konteks yang tidak valid ditentukan dalam parameter phContext . Digunakan dengan SSP Digest dan Schannel.
SEC_E_INVALID_TOKEN
Buffer berjenis salah atau tidak ada buffer tipe SECBUFFER_DATA yang ditemukan. Digunakan dengan Schannel SSP.
SEC_E_MESSAGE_ALTERED
Pesan telah diubah. Digunakan dengan SSP Digest dan Schannel.
SEC_E_OUT_OF_SEQUENCE
Pesan tidak diterima dalam urutan yang benar.
SEC_E_QOP_NOT_SUPPORTED
Kerahasiaan maupun integritas tidak didukung oleh konteks keamanan. Digunakan dengan Digest SSP.
SEC_I_CONTEXT_EXPIRED
Pengirim pesan telah selesai menggunakan koneksi dan telah memulai pematian. Untuk informasi tentang memulai atau mengenali pematian, lihat Mematikan Koneksi Schannel. Digunakan dengan Schannel SSP.
SEC_I_RENEGOTIATE
Pihak jarak jauh memerlukan urutan jabat tangan baru atau aplikasi baru saja memulai pematian. Kembali ke perulangan negosiasi dan panggil AcceptSecurityContext (Umum) atau InitializeSecurityContext (Umum), melewati buffer input kosong.
Jika fungsi mengembalikan buffer jenis SEC_BUFFER_EXTRA, ini harus diteruskan ke fungsi AcceptSecurityContext (Umum) sebagai buffer input.
Digunakan dengan Schannel SSP.
Negosiasi ulang tidak didukung untuk mode kernel Schannel. Pemanggil harus mengabaikan nilai pengembalian ini atau mematikan koneksi. Jika nilai diabaikan, klien atau server mungkin mematikan koneksi sebagai hasilnya.

 

Keterangan

Saat Anda menggunakan Schannel SSP, fungsi DecryptMessage (Umum) mengembalikan SEC_I_CONTEXT_EXPIRED ketika pengirim pesan telah mematikan koneksi. Untuk informasi tentang memulai atau mengenali pematian, lihat Mematikan Koneksi Schannel.

Saat Anda menggunakan Schannel SSP, DecryptMessage (Umum) mengembalikan SEC_I_RENEGOTIATE ketika pengirim pesan ingin menegosiasikan ulang koneksi (konteks keamanan). Aplikasi menangani negosiasi ulang yang diminta dengan memanggil AcceptSecurityContext (Umum) ( sisi server) atau InitializeSecurityContext (Umum) ( sisi klien) dan meneruskan buffer input kosong. Setelah panggilan awal ini mengembalikan nilai, lanjutkan seolah-olah aplikasi Anda membuat koneksi baru. Untuk informasi selengkapnya, lihat [Membuat konteks keamanan Schannel](creating-an-schannel-security-context.md).

Untuk informasi tentang interoperabilitas dengan GSSAPI, lihat Interoperabilitas SSPI/Kerberos dengan GSSAPI.

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

Fungsi SSPI

EncryptMessage (Umum)

SecBuffer

SecBufferDesc