CryptProtectData 中的不同结果
Different result in CryptProtectData
我尝试通过在 C++ 上使用 CryptProtectData 来加密解密的信息。但结果我得到了不同的结果。我的代码:
FILE *one =fopen("firstencrypt", "wb+");
FILE *two = fopen("secondencrypt", "wb+");
DATA_BLOB encryptdata , decryptdata ,secondendata;
string data = "Hello world.[=10=]";
decryptdata.cbData = (DWORD)data.length();
decryptdata.pbData = (BYTE*)data.c_str();
CryptProtectData(&decryptdata, NULL, NULL, NULL, NULL, 0, &encryptdata); // first protect data
fwrite(encryptdata.pbData, (int)encryptdata.cbData, 1, one); fclose(one); // writing result in file
CryptUnprotectData(&encryptdata, NULL, NULL, NULL, NULL, 0, &decryptdata); // unprotect data
cout << decryptdata.pbData << endl; // log
CryptProtectData(&decryptdata, NULL, NULL, NULL, NULL, 0, &secondendata); // second protect data
fwrite(secondendata.pbData, (int)secondendata.cbData, 1, two); fclose(two); // writing result in file`
在控制台中我得到:
Hello world.LMEM
firstencrypt hex result
secondencrypt hex result
而且我注意到每次启动该程序都会得到不同的结果。为什么?
每次你 运行 CryptProtectData 结果(几乎肯定)是不同的,因为加密密钥是从主密钥和随机生成的 "salts" 16 字节一起派生的,它们都存储在斑点。这种随机化实际上是一种很好的做法,解密也没有问题。
我尝试通过在 C++ 上使用 CryptProtectData 来加密解密的信息。但结果我得到了不同的结果。我的代码:
FILE *one =fopen("firstencrypt", "wb+");
FILE *two = fopen("secondencrypt", "wb+");
DATA_BLOB encryptdata , decryptdata ,secondendata;
string data = "Hello world.[=10=]";
decryptdata.cbData = (DWORD)data.length();
decryptdata.pbData = (BYTE*)data.c_str();
CryptProtectData(&decryptdata, NULL, NULL, NULL, NULL, 0, &encryptdata); // first protect data
fwrite(encryptdata.pbData, (int)encryptdata.cbData, 1, one); fclose(one); // writing result in file
CryptUnprotectData(&encryptdata, NULL, NULL, NULL, NULL, 0, &decryptdata); // unprotect data
cout << decryptdata.pbData << endl; // log
CryptProtectData(&decryptdata, NULL, NULL, NULL, NULL, 0, &secondendata); // second protect data
fwrite(secondendata.pbData, (int)secondendata.cbData, 1, two); fclose(two); // writing result in file`
在控制台中我得到:
Hello world.LMEM
firstencrypt hex result
secondencrypt hex result
而且我注意到每次启动该程序都会得到不同的结果。为什么?
每次你 运行 CryptProtectData 结果(几乎肯定)是不同的,因为加密密钥是从主密钥和随机生成的 "salts" 16 字节一起派生的,它们都存储在斑点。这种随机化实际上是一种很好的做法,解密也没有问题。