2016-08-13 38 views
0

我下載as3crypto並試圖將它集成到我的項目中。 我試圖做一個簡單的測試來匹配我在演示中得到的解密結果 - http://crypto.hurlant.com/demo/但我得到了上述錯誤。錯誤:PKCS#5:unpad:填充值無效。預計[154],找到[253]使用as3crypto

我在密鑰標籤上工作。我正在使用AES,CBC,PKCS5並預先安裝了IV。 密鑰和密文文本均設置爲HEX。

我首先做了加密,然後將密鑰和密文複製到我的函數中,以測試解密以查看它是否匹配。我直接從SecretTab.mxml中複製代碼,並修改它以獲取硬編碼值。

我在C#中編寫了一個小程序,使用相同的值對其進行解密,並且工作正常。

我多次驗證密鑰和密文,它是正確的。

public static function decrypt2():void 
    { 
     // 2: get a key 
     var k:String = Hex.fromString("e5693983c5c21e0f6191eb025d12803d6d17c5359994bf435b964cd0c107fc2c"); 
     var kdata:ByteArray = Hex.toArray(k); 
     //trace(String.fromCharCode(kdata[0])); 

     // 3: get an output 
     var txt:String = Hex.fromString("691682969f1946a1465ccfe19d429ace4188ee254425caa7fa84db5b1fba44a77f1dedfba7a1ffe516cb0646638e28f8ae6422b3cd63d380b21f8b8dcfbe067a"); 
     var data:ByteArray = Hex.toArray(txt); 

     // 1: get an algorithm.. 
     var name:String = "simple-aes-cbc";    

     var pad:IPad = new PKCS5; //:new NullPad; 
     //var pad:IPad = new NullPad(); 
     var mode:ICipher = Crypto.getCipher(name, kdata, pad); 
     pad.setBlockSize(mode.getBlockSize()); 
     // if an IV is there, set it. 
     if (mode is IVMode) { 
       trace("mode is IVMode"); 
       var ivmode:IVMode = mode as IVMode; 
       //ivmode.IV = Hex.toArray(iv.text); 
      } 
     mode.decrypt(data); 
     trace(Hex.fromArray(data)); 
    } 

回答

0

我發現我的錯別字。我有以下行

var k:String =  Hex.fromString("e5693983c5c21e0f6191eb025d12803d6d17c5359994bf435b964cd0c107fc2c"); 

改變

var k:String = "e5693983c5c21e0f6191eb025d12803d6d17c5359994bf435b964cd0c107fc2c"; 
    v 

var txt:String = Hex.fromString("691682969f1946a1465ccfe19d429ace4188ee254425caa7fa84db5b1fba44a77f1dedfba7a1ffe516cb0646638e28f8ae6422b3cd63d380b21f8b8dcfbe067a"); 

var txt:String = "691682969f1946a1465ccfe19d429ace4188ee254425caa7fa84db5b1fba44a77f1dedfba7a1ffe516cb0646638e28f8ae6422b3cd63d380b21f8b8dcfbe067a"; 

trace(Hex.fromArray(data)); 

trace(Hex.toString(Hex.fromArray(data))); 
0

您需要在解密之前明確設置字節數組,數據和IV。我不認爲ascrypto會爲你打破它,即使名稱上使用了簡單的標誌。

我不知道你的例子的狀態,但是錯誤表明字節數組不正確。 IV明確設置的示例。

var cipher:ICipher = Crypto.getCipher("aes256-cbc", keydata);; 
var dataBA:ByteArray = Hex.toArray(Hex.fromString(data)); 
var data:ByteArray = Hex.toArray(Hex.fromString("some data")); 
(cipher as IVMode).IV = Hex.toArray(Hex.fromString("some IV")); 
cipher.decrypt(data); 
+0

從演示中的代碼只設置它,如果模式是IVMode – jbassking10

+0

CBC是IVmode。您的示例將IV模式的設置註釋掉了。我編輯了答案以顯示設置IV的示例。 – 0xc3

+0

if語句失敗。 IV預先寫入密碼本身,因此必須讀取密碼並將其從密碼中移除。這是我的理解。 – jbassking10

相關問題