[New - Windows NT]
[New - Windows 95, OEM Service Release 2]
CryptEncrypt功能用于加密数据。用于加密数据的算法由CSP模块保存的密钥指定,由【的hKeyru-Latn】参数引用。
BOOL CRYPTFUNC CryptEncrypt(
HCRYPTKEY【的hKeyru-Latn】, | |
HCRYPTHASH【马】, | |
BOOL【最后】, | |
DWORD【dwFlags中】, | |
BYTE *【pbData】, | |
DWORD *【pdwDataLen】, | |
DWORD【dwBufLen】 | |
); |
参数
【的hKeyru-Latn】
[in]用于加密的密钥的句柄。应用程序通过使用CryptGenKey或CryptImportKey函数获取该句柄。
此键指定使用的加密算法。
【马】
[in]散列对象的句柄。只有在要执行加密的同时计算数据的哈希时,才使用此参数。有关详细信息,请参阅“备注”部分。
如果没有哈希要完成,这个参数必须为零。
【最后】
[in]布尔值,指定这是否是要加密的系列中的最后一个部分。这应该是TRUE,如果这是最后一个或唯一的块,如果不是,则为FALSE。有关详细信息,请参阅“备注”部分。
【dwFlags中】
[in]标志值。此参数保留供将来使用,并且应始终为零。
【pbData】
[in/out]保存要加密的数据的缓冲区。一旦执行了加密,加密的数据就被放回到同一个缓冲区中。
此缓冲区的大小由【dwBufLen】指定。要加密的数据字节数由【pdwDataLen】指定。
如果您正在做的是确定返回数据所需的字节数,则此参数可以为NULL。
【pdwDataLen】
[in/out]数据长度的地址。在调用此函数之前,调用者应将此参数设置为要加密的字节数。返回后,该地址将包含加密数据的字节数。
如果由【pbData】指定的缓冲区不足以容纳数据,则该函数返回ERROR_MORE_DATA错误代码(通过GetLastError),并将所需的缓冲区大小(以字节为单位)存储到【pdwDataLen】指向的变量中。
如果【pbData】为NULL,则不返回任何错误,并且该函数将指定为【pdwDataLen】的变量中的数据大小(以字节为单位)存储。这允许应用程序明确地确定正确的缓冲区大小。
当使用分组密码时,该数据长度必须是块大小的倍数,除非这是要加密的数据的最后部分,并且【最后】标志为TRUE。
【dwBufLen】
[in] 【pbData】缓冲区中的字节数。
请注意,根据所使用的算法,加密文本可能比原始明文稍大。在这种情况下,【pbData】缓冲区需要相应的大小。
通常,如果使用流密码,密文将与明文大小相同。如果使用分组密码,密文将达到比明文大的“块长度”。
备注
如果数据要同时进行散列和加密,则可以在【马】参数中传递哈希对象的句柄。哈希值将以传入的明文进行更新。此选项在生成签名和加密文本时非常有用。
在调用CryptEncrypt之前,应用程序应该通过调用CryptCreateHash函数来获取哈希对象的句柄。加密完成后,可以通过CryptGetHashParam函数获取哈希值,或使用CryptSignHash函数对哈希进行签名。
当需要对大量数据进行加密时,可以按部分进行。这通过重复调用CryptEncrypt完成。只有在上次调用CryptEncrypt时,【最后】参数才应设置为TRUE,因此加密引擎可以正确完成加密过程。当【最后】为TRUE时,执行以下额外操作:
*如果密钥是块密码密钥,则数据将被填充到密码的块大小的倍数。要找到密码的块大小,请使用CryptGetKeyParam获取密钥的KP_BLOCKLEN参数。
*如果密码在链接模式下运行,则下一个CryptEncrypt操作将将密码的反馈寄存器重置为密钥的KP_IV值。
*如果密码是流密码,则下一个CryptEncrypt将密码重置为初始状态。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要检索扩展错误信息,请使用GetLastError功能。
下表列出了GetLastError函数最常返回的错误代码。由“NTE”开头的错误代码由您使用的特定CSP生成。
错误 | 描述 |
ERROR_INVALID_HANDLE | 其中一个参数指定一个无效句柄。 |
ERROR_INVALID_PARAMETER | 其中一个参数包含无效值。这通常是一个非法的指针。 |
NTE_BAD_ALGID | 【的hKeyru-Latn】会话密钥指定此CSP不支持的算法。 |
NTE_BAD_DATA | 要加密的数据无效。例如,当使用分组密码并且【最后】标志为FALSE时,【pdwDataLen】指定的值必须是块大小的倍数。 |
NTE_BAD_FLAGS | 【dwFlags中】参数为非零。 |
NTE_BAD_HASH | 【马】参数包含无效句柄。 |
NTE_BAD_KEY | 【的hKeyru-Latn】参数不包含键的有效句柄。 |
NTE_BAD_LEN | 输出缓冲区的大小太小,不能容纳生成的密文。 |
NTE_BAD_UID | 创建密钥时指定的CSP上下文无法找到。 |
NTE_DOUBLE_ENCRYPT | 应用程序尝试加密相同的数据两次。 |
NTE_FAIL | 该函数以某种意想不到的方式失败。 |
NTE_NO_MEMORY | CSP在运行过程中耗尽了内存。 |
例
请参见加密和解密数据中的“加密示例”。
也可以看看
CryptCreateHash, CryptDecrypt, CryptGenKey, CryptGetHashParam, CryptImportKey, CryptSignHash