IllegalArgumentException:IV缓冲区对于给定的偏移/长度组合来说太短

时间:2016-07-27 03:20:58

标签: java php encryption aes pyopenssl

我有一个应用程序在PHP加密文本使用openssl_encrypt和以下方法。 (使用相同的盐值和iv作为'239422ae7940144f')

function encrypt_password($password) {
    define('AES_256_CBC', 'aes-256-cbc');
    $sessionId = $password;
    //random number for encrtyption(salt)
    $salt = '239422ae7940144f';
    $iv = $salt; //cipher length
    $encryptedSession = openssl_encrypt($sessionId, AES_256_CBC, $salt, 0, $iv);
    return array('encryptedPassword' => $encryptedSession, 'salt' => $salt);
}

function decrypt_password($result) {
    define('AES_256_CBC', 'aes-256-cbc');
    $vPassword = 'xUP9PwhcXm5xbKIfiSxMCA==';
    //random number for descrypt(salt)
    $salt = '239422ae7940144f';
    $iv = $salt; //cipher length.
    $decrypted = openssl_decrypt($vPassword, AES_256_CBC, $salt, 0, $iv);
    return $decrypted;
}

加密密码'abc123'提供'xUP9PwhcXm5xbKIfiSxMCA =='并解密它会返回'abc123'。

如何找到可以做同样的等效java程序。我尝试使用Using Java to decrypt openssl aes-256-cbc using provided key and iv上的示例,但它失败并带有

  

java.lang.IllegalArgumentException:IV缓冲区太短,不适合给定   偏移/长度组合。

以下是我正在使用的java程序中的secretKey和initVector行。

    final byte[] secretKey = javax.xml.bind.DatatypeConverter.parseHexBinary("239422ae7940144f");
    final byte[] initVector = javax.xml.bind.DatatypeConverter.parseHexBinary("239422ae7940144f");

1 个答案:

答案 0 :(得分:-2)

此“ sessionId”的长度很短。长度必须至少为“ iv”