我下载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));
}
从演示中的代码只设置它,如果模式是IVMode – jbassking10
CBC是IVmode。您的示例将IV模式的设置注释掉了。我编辑了答案以显示设置IV的示例。 – 0xc3
if语句失败。 IV预先写入密码本身,因此必须读取密码并将其从密码中移除。这是我的理解。 – jbassking10