【问题标题】:Can I decrypt data in C++ encrypted via PHP?我可以解密通过 PHP 加密的 C++ 中的数据吗?
【发布时间】:2012-08-30 20:08:36
【问题描述】:

我正在使用 mcrypt_encrypt 和 base64_encode 来加密 php 中的数据。我试过用 C++ 解密数据,但无济于事。我有多年来使用的 C++ Rijndael 逻辑,以及 base64_decode 逻辑。后者完美解码由 php 的 base64_encode 编码的字符串。我将 CBC 与 php 和 C++ 一起使用。我已经尝试过不同的块大小等等,但无济于事。非常感谢任何建议。

这是我的测试逻辑:

PHP

$key = "qwertyuiopasdfghjklzxcvbnmqwerty";  
$iv = "12345678901234561234567890123456";  
$text = "this is the text to encrypt";
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
echo base64_encode($crypttext)."<br/>";

C++

char* base64encode = ".. output from php...";  
unsigned char binaryData[256];  
int binaryNumBytes;  
char result[256];  
base64_decode(reinterpret_cast<unsigned char*>(base64encode), strlen(base64encode),       binaryData, &binaryNumBytes, false);  
Encryption::Rijndael rijndael;  
char* key = "qwertyuiopasdfghjklzxcvbnmqwerty";  
char* iv = "12345678901234561234567890123456";  
rijndael.Init(Encryption::Rijndael::CBC, reinterpret_cast<const char*>(key), 32, 32,    reinterpret_cast<const char*>(iv));  
rijndael.Decrypt(reinterpret_cast<const char*>(binaryData), reinterpret_cast<char*>(result), 32);  
cout << result << endl; 

编辑:如果我使用 ECB 模式,我可以让它工作。 2 之间的 CBC 存在一些问题。

【问题讨论】:

  • 能否提供相关的PHP和C++代码?
  • mcrypt 是对称的,所以如果你的代码是正确的,你应该这样做
  • 我对您使用的 C++ 端工具包并不完全熟悉。是要求 key/iv 输入的位长度或字节长度的 Init 方法。只是好奇。另外,我对 PHP 完全不熟悉,但是您调用的 mcrypt 函数是执行直接的 AES256-CBC 加密,还是实际上使用您的密钥作为 PBE 哈希库生成 AES 密钥? Prolly 完全在左侧领域,但同样,根本不熟悉 PHP(但对 PBE 相当了解)。
  • @Craig。 init 方法声明为:void Rijndael::Init(EMode mode, char const* key, int keylength, int blockSize, char const* initvector)。不幸的是,我不确定 mcrypt 函数内部发生了什么。

标签: php c++ encryption-symmetric


【解决方案1】:

使用欧洲央行模式是要走的路。

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 2019-10-17
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2013-01-12
    相关资源
    最近更新 更多