- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一组工具,其中 C++ 应用程序使用 AES 加密标准对数据进行编码,而 Java 应用程序对其进行解码。据我所知, key 长度必须为 16 个字节。但是当我尝试使用不同长度的密码时,我遇到了 AES_set_encrypt_key
函数的以下行为:
那么,有人知道最后一个案例到底发生了什么吗?
顺便说一句:如果密码的长度不正好是 16 个字符,Java 会抛出异常
谢谢,罗伯特
最佳答案
不要将字节数组与 C 字符串混淆。每个 C 字符串都是字节数组,但并非每个字节数组都是 C 字符串。
AES 的概念是使用“ key ”。它就像密码一样,但概念有点不同。它具有固定大小,在您的情况下必须为 16 个字节。
key 是一个 16 字节的字节数组,不是 C 字符串。这意味着它可以在缓冲区中的任何位置具有任何值,而 C 字符串必须以 null 结尾(内容末尾的 '\0'
)。
当您将 C 字符串提供给 AES 时,它仍会将其解释为缓冲区,并忽略途中的任何 \0
字符。换句话说,如果您的字符串是 "something"
,则缓冲区实际上是 "something\0????????"
,其中“?????? ?”这里指的是任何不能保证一直有效的随机垃圾字节。
为什么 key 长度 < 16 有效?在 Debug模式下,当您启动缓冲区时,它通常会保留一个在您的案例中重复的默认值。但它会根据编译器和/或平台的不同而发生变化,所以请接受。
并且 key 长度 > 16,AES 仅选取缓冲区的前 16 个字节并忽略其余字节。
关于c++ - 如何处理 AES_set_encrypt_key 短 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28227070/
我正在尝试使用 openssl 设置 key 。此代码正在生成段错误。有人可以帮忙吗? AES_KEY *aes_key; unsigned char key[] = { 0x00, 0x01, 0x
我从 AES_set_encrypt_key() 得到不同的结果,这取决于我编译的架构。据我了解, key 扩展是确定性的,这意味着其他地方出了问题。 我设置了一个简单的打印并与 diff 进行比较以
我正在编写一组工具,其中 C++ 应用程序使用 AES 加密标准对数据进行编码,而 Java 应用程序对其进行解码。据我所知, key 长度必须为 16 个字节。但是当我尝试使用不同长度的密码时,我遇
我尝试使用 openssl 实现编码和解码,using a code how example ,但是当我尝试使用自定义键时,代码已损坏,设置自定义键和自定义输入以在 openssl 中使用的正确形式是
我正在尝试写入 Python 的 OpenSSL C 扩展。共享库(*.so 文件)已生成,但在导入模块时遇到 undefined symbol 错误。它抛出以下错误( undefined symbo
我正在尝试编译我的 boringssl 库包装器。我已经编译了肯定包含符号 AES_set_encrypt_key 的 crypto.lib 文件,根据命令判断: nm crypto.lib --de
我是一名优秀的程序员,十分优秀!