【发布时间】:2020-04-14 02:53:57
【问题描述】:
如何使用 OpenSSL 在 PHP 中加密文件内容并在 C++ 中解密? 这是我的代码:
$dll = file('file.dll')[0];
$iv = substr(hash('sha256', 'test'), 0, 16);
$key = substr(hash('sha256', 'test'), 0, 32);
$dll_en = openssl_encrypt($dll, "AES-256-CBC", $key, 0, $iv);
这里是 c++
int main() {
/* A 256 bit key */
byte* key = (byte*)"9f86d081884c7d659a2feaa0c55ad015";
/* A 128 bit IV */
byte* iv = (byte*)"9f86d081884c7d65";
std::vector<byte> data = base64_decode("CyeJtJecBChtVSxeTLw9mYKapHwLNJed/5VVuyGOHNSTksBzH1Ym2JwLJv/LvlT9tqMEahwcX7Yj9jYVRCSnTliz/zQYk0pIi8CKTEGkqffqZd8CdA6joLMl9Ym6d+5wERgHEotURq8Kn+H3/GbUuEBUtLL9Cd1+VsKWDyqkE1c=");
byte* ciphertext = new byte[data.size()];
for (size_t i = 0; i < data.size(); i++)
{
ciphertext[i] = data.at(i);
}
byte decryptedtext[8096];
int decryptedtext_len;
decryptedtext_len = decrypt(ciphertext, data.size(), key, iv, decryptedtext);
decryptedtext[decryptedtext_len] = 0;
std::cout << decryptedtext;
return 0;
}
解密函数来自here
dll的第一行是
MZ����@�� �!�L�!This program cannot be run in DOS mode.
但我在控制台中得到的只是MZÉ。
我做错了什么?
【问题讨论】:
-
静态 IV 是一个非常糟糕的主意,从密钥派生的 IV 是一个更糟糕的主意,而实际上是密钥子字符串的 IV 是一个灾难性的糟糕主意。 IV 应该在每条消息中随机生成,并且通常打包到消息的前 N 个字节中,因为它们本身不应被视为秘密。
-
由于没有直接消息系统,所以我可以联系您,请发邮件至 shokarta@gmail.com 给我好吗?有件事想与您合作希望管理员可以将此帖子至少保留一段时间,以便用户可以与我联系。或者如果 stackoverflow 可以通过任何方式直接联系用户,请分享如何...
标签: php c++ file encryption openssl