gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:23:00 25 4
gpt4 key购买 nike

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

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

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

以及与 Java 中的种子具有相同键的完全相同的字符串,我得到:61FAD1203B7AC92AD9345771AA273DA5

有什么想法吗?

提前致谢!

最佳答案

这只是我的猜测,但我认为原因是你的 key 推导。虽然我不是真正的 Java 开发人员,所以我可能没有正确理解代码。

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

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

根据Java文档发现here , setSeed() “重新播种这个随机对象。给定的种子补充,而不是替换,现有的种子。”

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

关于java - 在 Android 和 Java 中加密/解密字符串的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9728538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com