C+中的PSK5填充+; 我试图在java和C++编程中实现一个AES加密。基本上,java将发送一个加密消息到一个设备,该设备有一个用C++语言编写的程序。

C+中的PSK5填充+; 我试图在java和C++编程中实现一个AES加密。基本上,java将发送一个加密消息到一个设备,该设备有一个用C++语言编写的程序。,java,c++,encryption,password-encryption,Java,C++,Encryption,Password Encryption,在Java端,为了填充加密和解密消息的密钥,我在ECB模式下使用了PSK5填充样式。 在C++方面,我试图达到同样的结果。 我写了一些代码,我想问这是一个好方法,还是应该尝试其他方法 string input = "ciao!"; char pad[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; if(input.length() % 8 != 0) { int missingLength = 8 - (input.

在Java端,为了填充加密和解密消息的密钥,我在ECB模式下使用了PSK5填充样式。 在C++方面,我试图达到同样的结果。 我写了一些代码,我想问这是一个好方法,还是应该尝试其他方法

string input = "ciao!";

char pad[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
if(input.length() % 8 != 0)
{
   int missingLength = 8 - (input.length() % 8 );
    for (int i = 0; i<missingLength; i++)
    {
       input += pad[missingLength];
    }

}
string input=“ciao!”;
字符填充[]={0x00、0x01、0x02、0x03、0x04、0x05、0x06、0x07、0x08};
if(input.length()%8!=0)
{
int missingLength=8-(input.length()%8);
对于(int i=0;i
  • 使用完整大小的密钥,16、24或32字节。如果密钥太短或使用密码,请使用密钥派生函数(如PBKDFG2)创建完整长度的安全密钥
  • 使用PKCS5(PKCS7)填充数据,它应该只是一个选项,因此不需要在代码中手动填充

  • 不要使用ECB模式,这是不安全的,请参阅,向下滚动到企鹅模式。而是使用随机IV的CBC模式,只需在加密数据前面加上IV用于解密,它不需要保密


  • 考虑使用跨平台/语言的解决方案,例如,可以提供密钥派生和身份验证。

    密钥根本不需要填充。如果填充了任何内容,则是明文消息(不要被明文这个词愚弄,AES是以位/字节为单位工作的)

    PKCS#5填充,或者-对于128位块大小的分组密码-而不是PKCS#7填充总是填充明文。这使得可以加密任何类型的明文消息,即使它以可以解释为填充字节的字节结尾


    在我看来,您应该使用以前生成的库,如Crypto++的OpenSSL,而不是创建自己的库。

    可能更好:另外,该数组有9个元素,您正在执行%8。这是您的意图吗?哦,这是一个错误,我的意图是只添加到密钥中的01到08字节来填充它。除了m这是不对的吗?我还没有找到任何与此相关的代码,而且我对加密还是很陌生。你为什么不使用Cypto++库来为你完成繁重的工作呢?你是说PKCS5吗?谢谢你的回答。你真的需要原谅,我的问题出了错。我想填充的实际上是“明文”数据。从我读到的内容来看,我认为你可以根据需要填充的字节添加简单字符。据你所知,打开Crypto++的SSL与arduino板兼容吗?我是否能够实现与JAVA的ECB/PKCS#5相同的结果?我不确定RNCryptor是否与arduino b兼容但是我会看一下,我的问题与密钥无关,但是正如你所说的,我的例子只是一个简单的例子,我的加密不需要非常安全,我只是想尝试得到与java C++在ECB/PKCS5密码模式中使用的相同的算法。hat将解密消息。据您所知,您是否知道有任何库可以为我这样做,并且与arduino兼容?或者我可以编写代码以实现相同的结果。