首页 文章

解密PHP中的as3crypto加密文本

提问于
浏览
1

我试图通过演示应用程序加密as3crypto中的文本 .

现在我试图通过PHP解密加密的文本,但似乎文本没有正确解密 . 有谁知道如何通过PHP正确解密它?还是我做错了?请赐教......

这是场景:

  • 在_393672中对此进行加密:

encryption: AES

mode: 加拿大广播公司

padding:

key: 11918f8bcd112e92744125008722050c

text: Lorem ipsum dolor sit amet,consectetur adipiscing elit . 在ut massa nec purus laoreet posuere quis vitae tortor .

initialize vector: 留空

  • 按加密 . 选择base64并复制密文 .

  • 制作一个包含这些代码并运行它的php脚本:

$ cipher = MCRYPT_RIJNDAEL_128;

$ mode = MCRYPT_MODE_CBC;

$ key =“11918f8bcd112e92744125008722050c”;

$ cipher =“PLACE CIPHER TEXT HERE ...”;

$ data = base64_decode($ cipher);

echo mcrypt_decrypt($ cipher,$ key,$ data,$ mode);

2 回答

  • 1

    这可行:

    PHP代码:

    //notice that $key and $iv length must be 16 chars long! ex: 1234567890123456
    function decrypt($data,$key,$iv)
    {
    
        $decr= mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($data), MCRYPT_MODE_CBC, $iv);    
        return $decr;   
    }
    

    这是AS3代码

    //notice that $key and $iv length must be 16 chars long! ex: 1234567890123456
    private function encrypt(input:String,decrKey:String,decrIV:String):String
    {
        var inputBA:ByteArray=Hex.toArray(Hex.fromString(input));        
        var key:ByteArray = Hex.toArray(Hex.fromString(decrKey));                
        var pad:IPad = new NullPad();
        var aes:ICipher = Crypto.getCipher("aes-cbc", key, pad);
        var ivmode:IVMode = aes as IVMode;
        ivmode.IV = Hex.toArray(Hex.fromString(decrIV));            
        aes.encrypt(inputBA);  
    
        return Base64.encodeByteArray( inputBA);
    }
    
  • 2

    问题可能在于你的关键 . 虽然您可以将十六进制字符串提供给as3crypto,并且它将知道如何处理它, mcrypt_decrypt 会将每个字符解释为's underlying ASCII value (like a = 97) instead of it'的十六进制值(a = 10) . 使用hex2bin方法将十六进制字符串转换为字节字符串,您的解密应该可以正常工作 .

    另外,问题可能在于as3crypto和php之间的默认IV(初始化向量)的不同想法 . 由于您使用的是CBC模式,因此您应该指定IV,这是一种很好的安全措施 . 还要注意与你的密钥相似的潜在缺陷,在as3中指定一个十六进制字符串并需要在php中转换它 .

相关问题