在Java中加密字符串并在C ++中解密它。 我还需要做些什么?

我需要在Java中加密一个字符串并用C ++解密它。 我见过C ++有一个Crypto ++库,Java有JCE。

对于c ++,我参考这个页面

http://social.msdn.microsoft.com/Forums/ko-KR/bd1722e7-07b3-4119-b7de-10788f9f6e36/aes-string-encryption-in-c?forum=windowsmobiledev

结果是不同的。

在java abcd1234 7e77643ca7d46d46298be3239f1a5cdb abcd1234

在c ++奇怪的人物……

我该怎么办?

您的一个问题是您的“密钥”是从String派生的,它为您提供了不同的Java和C结果:

Java:“abcdefgh12345678”.getBytes()为您提供UTF-8(Linux)或ISO-8859-1(Windows)表示。 无论如何,字符被解释为8位字符,你得到一个16字节长的数组。

C:你正在使用一个使用AFAIK 16位unicode字符的WCHAR。 因此,您的密钥最终是32字节长。

结论:不同的键意味着不同的结果……

重要提示:请勿使用ASCII字符作为加密密钥! 如果要使用密码加密某些内容,请使用密码派生函数(如PBKDF2)从密码生成加密。

出于测试目的,您可以在代码中静态定义byte / char数组:

char myArray[] = { 0x00, 0x11, 0x22 }; // c byte[] myArray = new byte[]{ 0x00, 0x11, 0x22 }; // Java 

显然java版本以hex格式显示为字符串格式,试试这个

 for (int i = 0 ; i < 16 ; ++i) std::cout << std::hex << static_cast(buf[i]); std::cout << std::endl; 

编辑:返回byteArrayToHex(加密); 在你的java代码中在bytearray上做同样的事情