在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上做同样的事情