当前位置: 首页 > 知识库问答 >
问题:

Java/静态编程语言AES-128-CBC加密产生与OpenSSL不同的结果

丁翊歌
2023-03-14

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

论据:

数据:[[1532347727425,6481]]

键: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-相同的输出。

共有1个答案

宰父俊彦
2023-03-14

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

 类似资料:
  • 我有一个来自第三方的加密示例,我需要与之集成。。。 我应该向他们发送加密的消息,他们确实在他们的末端解密它并执行所需的操作。 他们为我提供了一个例子,这就是他们希望字符串被加密的方式。 echo -n ['要加密的字符串']| OpenSSL enc-AES-128-CBC-A-A-no salt-K[十六进制加密密钥]-iv 3030303030303030303030303030 我得到的沙盒

  • 问题内容: 我们遇到了一种奇怪的情况,尽管我们在Java中使用的加密方法在配置上看起来完全相同,但它们生成的输出却与openssl不同。 使用相同的键和IV,文本“快速的棕狐狸跳过了懒狗!” 加密为base64的字符串… openssl: Java: 这是我们的openssl电话… 这是我们的Java … oopenssl输出 Java输出 我们缺少明显的东西吗?还是存在一些隐藏的复杂性? 问题答

  • 我们遇到了一个奇怪的情况,我们在Java中使用的加密方法产生了与openssl不同的输出,尽管它们在配置上看起来相同。 使用相同的键和IV,文本“敏捷的棕色狐狸跳过懒惰的狗!”加密到base64的字符串。。。 openssl: Java: 我们错过了什么明显的东西吗?还是有一些隐藏的复杂性?

  • 我只需要通过代码加密AES CBC 128位模式的字符串。我使用openssl库完成了这项工作,但无法获得正确的输出。 到目前为止,我已经完成了。 我的十六进制输出是:B0 15 751B50 80 D4 FF 81 68 146BB71B95 99 37 38 但正确的输出是:< code > 73 5C 04 F9 57 18 43 7C EE 68 27 59 2B 41 A8 DA (通过

  • 我希望有一个用C编写的程序,可以在没有openssl这样的大型库的帮助下,用AES-CBC对字符串进行编码/解码。 目标: 使用密码短语对字符串进行编码/解码: 因此,应用程序需要接受3个输入参数。。。 输入字符串(待编码)/或已编码字符串(待解码) 用于编码/解码字符串的密码 编码或解码指示器 我对C语言不熟悉(我可以用C#编码)。 我已经找到了https://github.com/kokke/

  • 我只想用这3种模式测试openSSL中的AES:128192和256密钥长度,但我解密的文本与我的输入不同,我不知道为什么。此外,当我传递一个巨大的输入长度(比如1024字节)时,我的程序显示。。。我的意见总是一样的,但这并不重要,至少现在是这样。代码如下: 编辑: 当我将输出大小更改为而不是时,我得到了结果: 那么,是否有可能存在Outpus大小和IV大小的问题?它们应该有什么尺寸(AES-CB