你复制的代码是错误的。它可能会或可能不会工作取决于Android版本。我的猜测是,它不在较新的。从种子转换到原始密钥的部分存在缺陷(见下文):SecureSeed.setSeed()
是而不是保证设置随机生成器状态,它只是添加到它。这意味着你不能保证获得相同的密钥。为了可靠地获得基于密码相同的密钥,您需要使用PBE(基于密码的加密)
private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
// this is wrong!
sr.setSeed(seed);
kgen.init(128, sr); // 192 and 256 bits may not be available
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
return raw;
}
一般情况下,首先要确保你可以可靠地加密/使用AES解密,那么你可能会移动到使用RSA 。你可能想告诉我们你想要达到的目标,你可能会以错误的方式去做。发明自己的密码协议并不是一个好主意。
如果你想回答你的问题,你应该包括你的代码的相关部分。 – Perception
RSA是非确定性的(有一个随机组件),因此无论是在相同的平台还是不同的平台上,每个加密都应该得到不同的结果。 (尽管你应该可以用其他实现来解密它们。) –
但我只加密了我的aes密钥ONCE ... – user538565