Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理AES\u set\u encrypt\u key短密钥 我正在编写一套工具,其中一个C++应用程序用AES加密标准编码数据,java应用程序对其进行解码。据我所知,密钥长度必须是16字节。但是当我尝试使用不同长度的密码时,我遇到了AES\u set\u encrypt\u key函数的以下行为: 长度=16:如预期,没有发生任何特殊情况 长度>16:密码在第十六个字符后被剪切 长度_C++_Openssl - Fatal编程技术网

如何处理AES\u set\u encrypt\u key短密钥 我正在编写一套工具,其中一个C++应用程序用AES加密标准编码数据,java应用程序对其进行解码。据我所知,密钥长度必须是16字节。但是当我尝试使用不同长度的密码时,我遇到了AES\u set\u encrypt\u key函数的以下行为: 长度=16:如预期,没有发生任何特殊情况 长度>16:密码在第十六个字符后被剪切 长度

如何处理AES\u set\u encrypt\u key短密钥 我正在编写一套工具,其中一个C++应用程序用AES加密标准编码数据,java应用程序对其进行解码。据我所知,密钥长度必须是16字节。但是当我尝试使用不同长度的密码时,我遇到了AES\u set\u encrypt\u key函数的以下行为: 长度=16:如预期,没有发生任何特殊情况 长度>16:密码在第十六个字符后被剪切 长度,c++,openssl,C++,Openssl,那么,有人知道最后一个案子到底发生了什么吗 顺便说一句:如果密码长度不是16个字符,Java会抛出一个异常 谢谢, Robert不要混淆字节数组和C字符串。每个C字符串都是字节数组,但不是每个字节数组都是C字符串 AES的概念是使用“密钥”。它的作用类似于密码,但概念有点不同。它有一个固定的大小,在您的案例中必须是16字节 该键是一个16字节的字节数组,不是C字符串。这意味着它可以在缓冲区中的任何点上具有任何值,而C字符串必须以null结尾(内容末尾的'\0') 当您向AES提供C字符串时,它仍

那么,有人知道最后一个案子到底发生了什么吗

顺便说一句:如果密码长度不是16个字符,Java会抛出一个异常

谢谢,
Robert

不要混淆字节数组和C字符串。每个C字符串都是字节数组,但不是每个字节数组都是C字符串

AES的概念是使用“密钥”。它的作用类似于密码,但概念有点不同。它有一个固定的大小,在您的案例中必须是16字节

该键是一个16字节的字节数组,不是C字符串。这意味着它可以在缓冲区中的任何点上具有任何值,而C字符串必须以null结尾(内容末尾的
'\0'

当您向AES提供C字符串时,它仍然将其解释为缓冲区,忽略途中的任何
\0
字符。换句话说,如果字符串是
“something”
,则缓冲区实际上是
“something\0?????”
,其中“???????”在这里表示无法保证始终工作的任何随机垃圾字节

为什么键长度<16有效?在调试模式下,当您启动缓冲区时,它通常会保留一个默认值,在您的案例中重复该值。但它会随着编译器和/或平台的变化而变化,所以请注意


密钥长度>16,AES只是选取缓冲区的前16个字节,忽略其余字节。

字符串与该API的AES密钥无关。我可以向您保证,如果您传递的八位字节缓冲区宽度不超过16字节,那么您将调用未定义的行为。问后果是什么,就是问没有定义的地方。如果你运气不好,那可能不是你的错。使用密码作为AES密钥不是一个好的开始。你应该把密码消化一千多次,并把最后一个作为关键材料。你能展示一下你使用的代码吗?无法将长度大于或小于正确长度的密钥传递给
AES\u set\u encrypt\u key
。它不将长度作为参数。您的代码可能只是有一个bug。它不是真正的代码,而是编码者。我仍然深入到安全的Java世界中去意识到这样的陷阱。谢谢,这就是解决方案