加密/解密Android和Java中的字符串不同的值

Kuu*_*Kuu 2 java security encryption android

我使用此代码在Java和Android中加密和解密一些字符串,在每个系统中我得到不同的值.

我正在使用的代码来自http://www.androidsnippets.com/encryptdecrypt-strings(我不会粘贴它,因为它非常大).

例如在Android中加密"aa"我得到这个:1C6BD31C57F42ACFD0EDD2DD5B7A92CA

与Java中的种子具有相同密钥的完全相同的字符串我得到:61FAD1203B7AC92AD9345771AA273DA5

任何的想法?

提前致谢!

mfa*_*nto 5

这只是我的猜测,但我认为原因是你的关键推导.我不是一个真正的Java开发人员,所以我可能无法正确理解代码.

加密和解密时,此代码始终调用getRawKey().getRawKey()看起来需要他们称之为种子或共享秘密的东西,并使用它来计算新的随机密钥以进行实际的加密/解密.

SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
    sr.setSeed(seed);
    kgen.init(128, sr); // 192 and 256 bits may not be available
    SecretKey skey = kgen.generateKey();
Run Code Online (Sandbox Code Playgroud)

根据这里发现的Java文档,setSeed()"重新种植这个随机对象.给定的种子补充,而不是替换现有的种子."

我的猜测是RNG的初始状态在每个系统/平台上都是不同的,因此它会给你不同的结果.您应该将密钥派生修复为更标准和一致的内容,或者使用已经建立的加密系统,如Bouncy Castle库中的PGP.