【发布时间】:2018-04-09 07:41:40
【问题描述】:
我遇到了以下问题。我的应用程序分为两个不同的部分:1)第一部分使用 AES/CBC(Java)加密一些数据,2)第二部分必须检索数据并解密(Android)。 要生成密钥,我使用以下代码
SecureRandom saltRand = new SecureRandom(new byte[] { 1, 2, 3, 4 });
byte[] salt = new byte[16];
saltRand.nextBytes(salt);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec("password".toCharArray(), salt, 1024, 128);
SecretKey key = factory.generateSecret(spec);
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(key.getEncoded());
KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(128, sr);
sksCrypt = new SecretKeySpec((kg.generateKey()).getEncoded(), "AES");
我的程序不需要不同的“源密钥”(字符串密码),但是只要源密钥相同,它就需要计算相同的密钥。不幸的是,程序的两部分生成的密钥不同,解密阶段失败。 有关如何解决此问题的任何建议?
【问题讨论】:
-
盐必须相同。
标签: java android encryption aes