- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个使用 AES 256 加密的应用程序。不幸的是我无法让它工作。也许我没有完全理解密码逻辑。
所以它正在工作,但据我了解,哈希包含密码。但如果我更改密码,输出是相同的。因此,CryptEncrypt
似乎忽略了哈希值。
有人可以帮我吗?
提前致谢!
这是我的代码:
if ( !CryptAcquireContext( &hProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, CRYPT_VERIFYCONTEXT ) )
{
printf( "\nCryptAcquireContext failed %d", GetLastError() );
return;
}
if ( !CryptImportKey( hProv, ( const LPBYTE )&keyBlob, sizeof( keyBlob ), 0, CRYPT_EXPORTABLE, &hPubKey ) )
{
printf( "\nCryptImportKey failed %d", GetLastError() );
return;
}
if ( !CryptCreateHash( hProv, CALG_SHA_256, 0, 0, &hHash ) )
{
printf( "Error %x during CryptCreateHash!\n", GetLastError() );
return;
}
if ( !CryptHashData( hHash, ( PBYTE )wszPassword, cbPassword, 0 ) )
{
printf( "Error %x during CryptHashData!\n", GetLastError() );
return;
}
//if ( !CryptDeriveKey( hProv, CALG_AES_256, hHash, CRYPT_EXPORTABLE, &hKey ) )//hKey
//{
// printf( "Error %x during CryptDeriveKey!\n", GetLastError() );
// return;
//}
if ( !CryptSetKeyParam( hPubKey, KP_IV, ivData, 0 ) )
{
printf( "\nCryptSetKeyParam failed %d", GetLastError() );
return;
}
DWORD size = ( DWORD )strlen( StringToEncrypt ) / sizeof( char );
//printf( "\nLength of string to encrypt = %d\n\n", size );
if ( !CryptEncrypt( hPubKey, hHash, TRUE, 0, ( LPBYTE )StringToEncrypt, &size, ( size / 16 + 1 ) * 16 ) )
{
printf( "\nCryptEncrypt failed %d", GetLastError() );
int a = GetLastError();
switch ( a )
{
case NTE_BAD_HASH_STATE: printf( "NTE_BAD_HASH_STATE" ); break;
case NTE_BAD_HASH: printf( "NTE_BAD_HASH" ); break;
}
return;
}
最佳答案
“密码”(通常称为 key )位于 hPubKey 中。 hHash 用于在加密完成的同时生成哈希。看here了解更多信息。
关于CryptEncrypt 忽略 HASH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26812611/
我正在尝试制作一个使用 AES 256 加密的应用程序。不幸的是我无法让它工作。也许我没有完全理解密码逻辑。 所以它正在工作,但据我了解,哈希包含密码。但如果我更改密码,输出是相同的。因此,Crypt
我正在尝试使用 wincrypt 加密文本消息。然而,我的代码是不可预测的。它不会加密/解密整个明文,而只是其中的一部分。如果我更改密码的长度(例如更改为“password123”),它会加密/解密不
在我们的产品中有这样一种情况,很长一段时间以来,一些数据作为 SQL 字符串(选择 MS SQL 服务器或 sybase SQL)存储在应用程序的数据库中,这些数据是通过 Windows API 函数
我正在编写将生成 RSA key 对、导出\导入 key 和加密字符串的小程序。所以,我写了这段代码: void EncryptString(std::string data) { int lengh
我正在使用 Windows API CryptEncrypt 和 CALG_AES_256我想用密码来加密,据我了解 1. CryptAcquireContext 2. CryptCreateHa
我制作了一个小应用程序来加密和解密一些文本。只要我直接使用加密的字节数组,一切都很好。但是,一旦我复制数组以模仿将加密文本作为文件发送的过程,解密就不会运行。 为什么我无法使用复制的数组运行解密? u
.net 有这些函数的实现吗?或者您知道我可以从哪里下载该单元,它将这些方法包装在一个 c# 单元中吗? 谢谢! 最佳答案 这就是你要找的here 关于c# - .net 下是否提供 CryptoAP
首先,如果我在这里遗漏了什么,我深表歉意。这是我对 Windows CryptAPI 的第一次尝试,虽然我已经通过谷歌、MSDN、MSDN 的示例等进行了搜索,但我无法弄清楚为什么会出现此问题。我有以
你好我正在尝试在 C++ 和 C# 之间加密和解密已经使用 CryptEncrypt wincrypt 在这里我使用的代码创建了一个 dll 项目C++语言 #include #include e
我是一名优秀的程序员,十分优秀!