Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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
C++ 两个AES实现生成了不同的加密结果_C++_Encryption_Aes - Fatal编程技术网

C++ 两个AES实现生成了不同的加密结果

C++ 两个AES实现生成了不同的加密结果,c++,encryption,aes,C++,Encryption,Aes,我有一个应用程序,它使用开源libgcrypt加密/解密32字节的数据块。现在我将使用MicrosoftCryptAPI来替换它。我的问题是,libgcrypt和cryptApi方法生成不同的密文内容,因为我在CFB模式下使用相同的AES-256算法jm、相同的密钥和相同的IV,尽管密文可以由它们自己相应地解密 能告诉我有什么问题吗?谢谢。这两种方法是采用不同的尾数,还是按不同的顺序分配键/IV中的字节 如果endianness假设不同,则可能需要对key、IV和/或明文中的字节重新排序,以获得

我有一个应用程序,它使用开源libgcrypt加密/解密32字节的数据块。现在我将使用MicrosoftCryptAPI来替换它。我的问题是,libgcrypt和cryptApi方法生成不同的密文内容,因为我在CFB模式下使用相同的AES-256算法jm、相同的密钥和相同的IV,尽管密文可以由它们自己相应地解密


能告诉我有什么问题吗?谢谢。

这两种方法是采用不同的尾数,还是按不同的顺序分配键/IV中的字节


如果endianness假设不同,则可能需要对key、IV和/或明文中的字节重新排序,以获得匹配结果。例如,如果您以abcdefgh的顺序提供字节,则可能需要将其切换为“dcbahgfe”以使事情正常进行。

这两种方法是采用不同的尾数,还是以不同的顺序分配键/IV中的字节


如果endianness假设不同,则可能需要对key、IV和/或明文中的字节重新排序,以获得匹配结果。例如,如果您以abcdefgh的顺序提供字节,则可能需要将其切换为“dcbahgfe”才能正常工作。

您的密钥和IV的长度是多少?
如果opentext的长度正好是256位,则密文是否不同?

密钥和IV的长度是多少?
如果opentext的长度正好是256位,则密文是否不同?

CFB还有一个附加参数,即每次迭代时的移位量。政府有一些信息。即,为每个块加密加密x位,其中x是AES的1和块大小128之间的任意值。我怀疑在您的代码中,Microsoft CryptoAPI和libgcrypt对x使用的值不同


如的文档中所述,Windows默认为x=8,即一次一个字节。这是KP_MODE_BITS参数。另一方面,对于n位分组密码,即对于AES,x=128,则为libgcrypt。我不确定libgcrypt是否可以使用另一个值。

CFB还有一个额外的参数,即每次迭代时的移位量。政府有一些信息。即,为每个块加密加密x位,其中x是AES的1和块大小128之间的任意值。我怀疑在您的代码中,Microsoft CryptoAPI和libgcrypt对x使用的值不同


如的文档中所述,Windows默认为x=8,即一次一个字节。这是KP_MODE_BITS参数。另一方面,对于n位分组密码,即对于AES,x=128,则为libgcrypt。我不确定是否可以说服libgcrypt使用另一个值。

我也有同样的问题,但使用的库不同。我注意到这个图书馆里有一件事;如果我传递的输入字节小于32字节,在这种情况下,它会显示两者都是相同的加密数据


你的情况就是这样吗?如果是这样,那就意味着问题出在填充机制上

我也有同样的问题,但有不同的库。我注意到这个图书馆里有一件事;如果我传递的输入字节小于32字节,在这种情况下,它会显示两者都是相同的加密数据


你的情况就是这样吗?如果是这样,那就意味着问题出在填充机制上

我认为问题在于块大小。正如您所说,您使用32字节作为块大小,确保两者的块大小相同,并且也支持。因为Aes的一些库块大小固定为16字节。

我认为问题在于块大小。正如您所说,您使用32字节作为块大小,确保两者的块大小相同相同且支持。因为Aes的某些库块大小固定为16字节。

我相信它们有不同的endianness。我相信它们有不同的endianness。我可以看到您的方向,但在CFB模式下,密码应该作为流密码有效运行,没有填充…密钥的长度是32字节,IV是16字节。无论opentext的大小如何,密文都是不同的。请重新排序key、IV和/或明文中的字节,并尝试它们的所有组合。没有人在工作。我可以看到你的方向,但在CFB模式下,密码应该作为流密码有效地运行,没有填充…密钥的长度是32字节,IV,16字节。无论opentext的大小如何,密文都是不同的。请重新排序key、IV和/或明文中的字节,并尝试它们的所有组合。没有人在工作。通过传递大于64的值调用此CryptSetKeyParam始终返回0失败,当模式位值不超过64时,此函数调用似乎对密文内容没有影响,这可能是因为我只需要在应用程序中调用加密函数一次。通过传递大于64的值调用此CryptSetKeyParam总是返回0失败,并且此函数调用似乎已失败 当模式位值不超过64时,对密文内容没有影响,这可能是因为我只需要在应用程序中调用加密函数一次。