一方面使用OpenSSL进行加密并使用CryptoPP进行解密的问题[AES-128]

I'm having some issues with encryption/decryption with different cipher suites.

On one hand, I am using PHP to encrypt a string:

base64_encode(openssl_encrypt($data, "AES-128-CBC", $password, OPENSSL_RAW_DATA, "0123456789abdefg"));

And on the other hand, I am decrypting it with CryptoPP:

std::string decrypted = decrypt(dl_notdecrypted, decryption_key, "0123456789abdefg");

The function "decrypt":

std::string decrypt(const std::string& str_in, const std::string& key, const std::string& iv)
{

    std::string str_out;
    CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption decryption((byte*)key.c_str(), key.length(), (byte*)iv.c_str());
    CryptoPP::StringSource decryptor(str_in, true,
        new CryptoPP::Base64Decoder(
            new CryptoPP::StreamTransformationFilter(decryption,
                new CryptoPP::StringSink(str_out)
                )
            )
        );
    return str_out;
}

It fails with a "Unknown Exception". I am guessing this is a padding issue with OpenSSL, but I have no clue how I am supposed to fix this.

If there is any help available with this, that would be very nice.

douxiajia6720
douxiajia6720 OpenSSL和Crypto++/StreamTransformationFilter似乎默认为PKCS#7填充。所以这不太可能是问题所在。我宁愿怀疑密文或密钥被破坏了。
大约 4 年之前 回复
dqrm8199
dqrm8199 iv是16个字符,由于某种原因,iv字符串“0123456789abdefg”中缺少“c”,因此它看起来像17个字符。
大约 4 年之前 回复
drwn65609
drwn65609 看起来你的IV在这两个地方都是17个字符,以便启动。
大约 4 年之前 回复
dpvmjk0479
dpvmjk0479 部分问题是提供完全相同的输入和选项,PHP没有帮助,因为加密本质上是基于字节的,而不是基于字符串的。您将很好地在调用之前提供密钥,iv和数据转储(十六进制),并在函数调用之后提供转储。确保功能所期望的类型。您应该使用PKCS#7(néePKCS#5)填充,检查默认值以确保。最佳做法是在加密数据前加上iv加密,并在解密时使用,iv不是秘密。
大约 4 年之前 回复
dongyou7292
dongyou7292 好的,将尝试SHA1哈希并报告回来。
大约 4 年之前 回复
douke1891
douke1891 512位不是受支持的AES密钥大小。
大约 4 年之前 回复
duanmie9682
duanmie9682 密码是SHA512哈希的实际密码,zaph。
大约 4 年之前 回复
dpchen2004
dpchen2004 密码/密钥是否是精确支持的长度?
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问