解密PHP中的as3crypto加密文本(decrypt a as3crypto encrypted

2019-07-21 22:00发布

我试图通过演示程序加密在as3crypto文本。

我现在想解密通过PHP的加密后的文本,但似乎文本不正确解密。 有没有人知道如何通过PHP正确解密呢? 还是我做错了? 请赐教...

这里的情景:

  1. 在加密这个http://crypto.hurlant.com/demo/ :

    加密:AES

    模式:CBC

    填充:

    关键:11918f8bcd112e92744125008722050c

    文本:Lorem存有悲坐阿梅德,consectetur adipiscing ELIT。 在UT马萨NEC普鲁斯laoreet posuere QUIS简历tortor。

    初始化向量: 留空

  2. 按加密。 选择Base64和复制的密文。

  3. 使具有这些代码的PHP脚本并运行它:

    $密码= MCRYPT_RIJNDAEL_128;

    $模式= MCRYPT_MODE_CBC;

    $关键= “11918f8bcd112e92744125008722050c”;

    $密码=“PLACE密文在这里...”

    $数据= BASE64_DECODE($密码);

    回波mcrypt_decrypt($密码,$键,$数据,$模式);

Answer 1:

问题可能在于你的关键。 虽然你可以养活一个十六进制字符串as3crypto,它会知道什么做的呢, mcrypt_decrypt将解释每一个字符,因为它的底层ASCII值(如= 97),而不是它的十六进制值(= 10)。 使用HEX2BIN方法将十六进制字符串转换成字节串,你的解密或许应该很好地工作。

也,发行可与as3crypto和PHP之间的默认IV不同的想法(初始化矢量)休息。 由于使用的是CBC模式下,你应该指定一个IV,只是作为一个良好的安全习惯。 也知道类似的与你的钥匙在AS3中指定一个十六进制字符串,并需要将其转换在PHP中,潜在的陷阱。



Answer 2:

这会工作:

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);
}       


文章来源: decrypt a as3crypto encrypted text in PHP