【问题标题】:Java/Kotlin AES-128-CBC encryption produces different result than OpenSSLJava/Kotlin AES-128-CBC 加密产生与 OpenSSL 不同的结果
【发布时间】:2018-12-31 19:53:21
【问题描述】:

我正在尝试在 Kotin/Java 中实现 aes-128-cbc 加密。 不幸的是,加密结果与使用相同参数的 OpenSSL 输出不同。

参数:

Data: [[[1532347727425, 6481]]]

Key: f70559cb976123807855fd9081f17760

IV: b7e5daacd367e143d20a0b536507a6d6

Kotlin 实现:

const val AES_TRANSFORMATION = "AES/CBC/PKCS5Padding"

val cipher = Cipher.getInstance(AES_TRANSFORMATION)
val keySpec = SecretKeySpec(aesKey.hexToByteArray(), "AES")
val ivSpec = IvParameterSpec(iv.hexToByteArray())
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec)
val result = cipher.doFinal(data.toByteArray())
return String(Base64Helper().encode(result))

OpenSSL-CMD:

echo [[[1532347727425, 6481]]] | openssl aes-128-cbc -d -K f70559cb976123807855fd9081f17760 -iv b7e5daacd367e143d20a0b536507a6d6 -base64

结果:

Kotlin/Android: fHcK3EeXEzSYtIa8PbhXkANwv2sU/qgktUnabzgE9HI=
OpenSSL: 7L1XLM/5ihCNRryiSZ8RMlPSeqsHDXa785dJujS7c/M=

使用 OpenSSL 解密结果会产生以下错误:

bad decrypt 
140621119981208:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:529:

更新:将填充更改为 PKCS5 - 相同的输出。

【问题讨论】:

    标签: java encryption kotlin openssl


    【解决方案1】:

    您应该使用AES/CBC/PKCS5Padding 密码

    【讨论】:

    • 我改了,结果还是一样
    • 我认为您的 hexToByteArray() 实施存在问题。
    • 你说得对,它使用不同的十六进制到字节实现,谢谢
    猜你喜欢
    • 2019-08-17
    • 2020-04-15
    • 2013-08-11
    • 2014-01-31
    • 2012-06-06
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多