Error: PKCS#5:unpad: Invalid padding value. expected [154], found [253] using as3crypto
Error: PKCS#5:unpad: Invalid padding value. expected [154], found [253] using as3crypto
我下载了 as3crypto 并一直在尝试将其集成到我的项目中。
我正在尝试做一个简单的测试来匹配我在演示中获得的解密结果 - http://crypto.hurlant.com/demo/ 但我收到上述错误。
我正在处理密钥选项卡。我正在使用 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));
}
您需要在解密之前显式设置字节数组、数据和 IV。我不认为 as3crypto 会为你破解它,即使在名称上使用了简单的标志。
我不知道你的示例说明了什么,但是错误表明字节数组不正确。显式设置 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);
我发现了我的拼写错误。我不得不更改以下行
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)));
我下载了 as3crypto 并一直在尝试将其集成到我的项目中。 我正在尝试做一个简单的测试来匹配我在演示中获得的解密结果 - http://crypto.hurlant.com/demo/ 但我收到上述错误。
我正在处理密钥选项卡。我正在使用 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));
}
您需要在解密之前显式设置字节数组、数据和 IV。我不认为 as3crypto 会为你破解它,即使在名称上使用了简单的标志。
我不知道你的示例说明了什么,但是错误表明字节数组不正确。显式设置 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);
我发现了我的拼写错误。我不得不更改以下行
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)));