簡體   English   中英

在PHP中解密as3crypto加密文本

[英]decrypt a as3crypto encrypted text in PHP

我試圖通過演示應用程序加密as3crypto中的文本。

現在我試圖通過PHP解密加密的文本,但似乎文本沒有正確解密。 有誰知道如何通過PHP正確解密它? 或者我做錯了嗎? 請賜教......

這是場景:

  1. http://crypto.hurlant.com/demo/中加密:

    加密: AES

    模式: CBC

    填充:

    鍵: 11918f8bcd112e92744125008722050c

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

    初始化向量: 將其留空

  2. 按加密。 選擇base64並復制密文。

  3. 制作一個包含這些代碼並運行它的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);

這可行:

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

問題可能在於你的關鍵。 雖然您可以將十六進制字符串提供給as3crypto,但它會知道如何處理它, mcrypt_decrypt會將每個字符解釋為它的基礎ASCII值(如a = 97)而不是它的十六進制值(a = 10)。 使用hex2bin方法將十六進制字符串轉換為字節字符串,您的解密應該可以正常工作。

另外,問題可能在於as3crypto和php之間的默認IV(初始化向量)的不同想法。 由於您使用的是CBC模式,因此您應該指定IV,這是一種很好的安全措施。 還要注意與你的密鑰相似的潛在缺陷,在as3中指定一個十六進制字符串並需要在php中轉換它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM