Fungsi CryptDecodeMessage (wincrypt.h)
Fungsi CryptDecodeMessage mendekode, mendekripsi, dan memverifikasi pesan kriptografi.
Fungsi ini dapat digunakan ketika jenis pesan kriptografi tidak diketahui. Konstanta dwMsgTypeFlags dapat dikombinasikan dengan operasi bitwise-OR sehingga fungsi akan mencoba menemukan salah satu jenisnya. Ketika salah satu jenis ditemukan, fungsi melaporkan jenis yang ditemukan dan mengembalikan data yang sesuai dengan jenis tersebut.
Dalam setiap pass, fungsi hanya retak satu tingkat enkripsi atau pengodean. Untuk pemecahan tambahan, fungsi ini, atau salah satu Fungsi Pesan Sederhana lainnya, harus dipanggil lagi.
Sintaks
BOOL CryptDecodeMessage(
[in] DWORD dwMsgTypeFlags,
[in] PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
[in] PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
[in] DWORD dwSignerIndex,
[in] const BYTE *pbEncodedBlob,
[in] DWORD cbEncodedBlob,
[in] DWORD dwPrevInnerContentType,
[out, optional] DWORD *pdwMsgType,
[out, optional] DWORD *pdwInnerContentType,
[out, optional] BYTE *pbDecoded,
[in, out, optional] DWORD *pcbDecoded,
[out, optional] PCCERT_CONTEXT *ppXchgCert,
[out, optional] PCCERT_CONTEXT *ppSignerCert
);
Parameter
[in] dwMsgTypeFlags
Menunjukkan jenis pesan. Jenis pesan dapat dikombinasikan dengan operator bitwise-OR. Parameter ini bisa menjadi salah satu jenis pesan berikut:
- CMSG_DATA_FLAG
- CMSG_SIGNED_FLAG
- CMSG_ENVELOPED_FLAG
- CMSG_SIGNED_AND_ENVELOPED_FLAG
- CMSG_HASHED_FLAG
[in] pDecryptPara
Penunjuk ke struktur CRYPT_DECRYPT_MESSAGE_PARA yang berisi parameter dekripsi.
[in] pVerifyPara
Penunjuk ke struktur CRYPT_VERIFY_MESSAGE_PARA yang berisi parameter verifikasi.
[in] dwSignerIndex
Menunjukkan penanda tangan mana, di antara kemungkinan banyak penanda tangan pesan, yang akan diverifikasi. Indeks ini dapat diubah dalam beberapa panggilan ke fungsi untuk memverifikasi penanda tangan tambahan.
dwSignerIndex diatur ke nol untuk penanda tangan pertama. Jika fungsi mengembalikan FALSE, dan GetLastError mengembalikan CRYPT_E_NO_SIGNER, panggilan sebelumnya mengembalikan penanda tangan terakhir pesan. Parameter ini hanya digunakan dengan pesan jenis CMSG_SIGNED_AND_ENVELOPED atau CMSG_SIGNED. Untuk semua jenis pesan lainnya, harus diatur ke nol.
[in] pbEncodedBlob
Penunjuk ke BLOB yang dikodekan yang akan didekodekan.
[in] cbEncodedBlob
Ukuran, dalam byte, dari BLOB yang dikodekan.
[in] dwPrevInnerContentType
Hanya berlaku saat memproses pesan kriptografi berlapis. Saat memproses pesan kriptografi luar, pesan harus diatur ke nol. Saat mendekode pesan kriptografi berlapis, pesan tersebut diatur ke nilai yang dikembalikan di pdwInnerContentType dengan panggilan CryptDecodeMessage sebelumnya untuk pesan luar. Ini bisa menjadi salah satu jenis CMSG yang tercantum dalam pdwMsgType. Untuk kompatibilitas mundur, atur dwPrevInnerContentType ke nol.
[out, optional] pdwMsgType
Penunjuk ke DWORD yang menentukan jenis pesan yang dikembalikan. Parameter ini bisa menjadi salah satu jenis pesan berikut:
- CMSG_DATA
- CMSG_SIGNED
- CMSG_ENVELOPED
- CMSG_SIGNED_AND_ENVELOPED
- CMSG_HASHED
[out, optional] pdwInnerContentType
Penunjuk ke DWORD yang menentukan jenis pesan dalam. Kode jenis pesan yang digunakan untuk pdwMsgType juga digunakan di sini.
Jika tidak ada bersarang kriptografi, CMSG_DATA dikembalikan.
[out, optional] pbDecoded
Penunjuk ke buffer untuk menerima pesan yang didekodekan.
Parameter ini dapat berupa NULL jika pesan yang didekode tidak diperlukan atau untuk mengatur ukuran pesan yang didekodekan untuk tujuan alokasi memori. Pesan yang didekode tidak akan dikembalikan jika parameter ini NULL. Untuk informasi selengkapnya, lihat Mengambil Data Dengan Panjang Tidak Diketahui.
[in, out, optional] pcbDecoded
Penunjuk ke variabel yang menentukan ukuran, dalam byte, dari buffer yang diacu oleh parameter pbDecoded . Ketika fungsi kembali, variabel ini berisi ukuran pesan yang didekodekan.
[out, optional] ppXchgCert
Penunjuk ke penunjuk ke struktur CERT_CONTEXT dengan sertifikat yang sesuai dengan kunci pertukaran privat yang diperlukan untuk mendekode pesan. Parameter ini hanya diatur untuk jenis pesan CMSG_ENVELOPED dan CMSG_SIGNED_AND_ENVELOPED.
[out, optional] ppSignerCert
Penunjuk ke penunjuk ke struktur CERT_CONTEXTkonteks sertifikat penanda tangan. Parameter ini hanya diatur untuk jenis pesan CMSG_SIGNED dan CMSG_SIGNED_AND_ENVELOPED.
Mengembalikan nilai
Jika fungsi berhasil, fungsi mengembalikan bukan nol (TRUE).
Jika fungsi gagal, fungsi akan mengembalikan nol (FALSE). Untuk informasi kesalahan yang diperluas, hubungi GetLastError.
Fungsi CryptDecryptMessage, CryptVerifyMessageSignature, atau CryptVerifyMessageHash dapat disebarluaskan ke fungsi ini.
Kode kesalahan berikut paling umum dikembalikan oleh fungsi GetLastError .
Menampilkan kode | Deskripsi |
---|---|
|
Jika buffer yang ditentukan oleh parameter pbDecoded tidak cukup besar untuk menyimpan data yang dikembalikan, fungsi mengatur kode ERROR_MORE_DATA dan menyimpan ukuran buffer yang diperlukan, dalam byte, dalam variabel yang ditunjukkan oleh pcbDecoded. |
Keterangan
Parameter dwMsgTypeFlags menentukan kumpulan pesan yang diizinkan. Misalnya, untuk mendekode pesan SIGNED atau ENVELOPED, atur dwMsgTypeFlags ke CMSG_SIGNED_FLAG | CMSG_ENVELOPED_FLAG. Baik atau kedua parameter pDecryptPara atau pVerifyPara harus ditentukan.
Untuk pesan yang berhasil didekodekan atau diverifikasi, penunjuk konteks sertifikat yang diarahkan oleh ppXchgCert dan ppSignerCert diperbarui. Mereka harus dikosongkan dengan memanggil CertFreeCertificateContext. Jika fungsi gagal, fungsi diatur ke NULL.
Parameter ppXchgCert atau ppSignerCert dapat diatur ke NULL sebelum fungsi dipanggil, yang menunjukkan bahwa pemanggil tidak tertarik untuk mendapatkan sertifikat pertukaran atau konteks sertifikat penanda tangan.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | wincrypt.h |
Pustaka | Crypt32.lib |
DLL | Crypt32.dll |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk