CryptEncrypt

【勇芳软件工作室】汉化HomePreviousNext

[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]用于加密的密钥的句柄。应用程序通过使用CryptGenKeyCryptImportKey函数获取该句柄。

此键指定使用的加密算法。

【马】

[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_MEMORYCSP在运行过程中耗尽了内存。

请参见加密和解密数据中的“加密示例”。

也可以看看

CryptCreateHash, CryptDecrypt, CryptGenKey, CryptGetHashParam, CryptImportKey, CryptSignHash