0

as3crypto 中出现“无效填充值”错误的原因是什么?

Error: PKCS#5:unpad: Invalid padding value. expected [153], found [25]
    at com.hurlant.crypto.symmetric::PKCS5/unpad()
    at com.hurlant.crypto.symmetric::CTRMode/decrypt()
    at com.hurlant.crypto.symmetric::SimpleIVMode/decrypt()
    at com.mycompany.myproject::Application$/decrypt()
    ... (followed by the rest of my application stack)

我想我以前通过使用 SimpleIVMode 包装类确保加密数据前面带有初始化向量 (IV) 来解决这个问题。不过,在这种情况下,我已经在这样做了。

我没有使用Crypto该类,因为最小化下载大小很重要。

有任何想法吗?

我的抽象代码(在Application课堂上):

protected static var cipher:ICipher = 
    new SimpleIVMode(
        new CTRMode(
            new AESKey( Hex.toArray("53c12a8eb8612733ec817290580c3d") // not actual key
        ))
    );

public static function encrypt(d:ByteArray):ByteArray {
    d.position = 0;
    cipher.encrypt(d);
    d.position = 0;
    return d;
}

public static function decrypt(d:ByteArray):ByteArray {
    d.position = 0;
    cipher.decrypt(d); // THIS LINE THROWS
    d.position = 0;
    return d;
}

所有d.position = 0这些都是我的偏执狂。

加密代码:

// we first have to serialize the object to a ByteArray, then encrypt that data.
var encryptedValue:ByteArray = new ByteArray();
encryptedValue.writeObject(objectToEncrypt);
encryptedValue.position = 0; // paranoia?
Application.encrypt(encryptedValue);
so.setProperty(key, encryptedValue); // save it in my SharedObject

现在导致错误的代码:

var data:ByteArray = so.data[key]; // get the byte array out of storage.
trace(data.length); // Check that it's real... I get 553 bytes
Application.decrypt(data); // THIS LINE THROWS
4

1 回答 1

0

我认为您应该扩展 SharedObject 的内存大小,例如

so.flush(1000000000000000);
于 2010-09-01T03:44:28.720 回答