我的任务是解密使用以下标准加密的 Java 文件:
加密:
`
byte[] masterKey;
if (Base64.decode(config.getProperty("encrMasterKey")) != null) {
masterKey=aes.decrypt(Base64.decode(config.getProperty("encrMasterKey")),"password");
} else {
masterKey = aes.keyGeneration();
byte[] encrMasterKey = aes.encrypt(masterKey, keyderivation("password"));
writeToConfigFile("encrMasterKey", Base64.encode(encrMasterKey));
}
Cipher cipher = Cipher.getInstance("AES");
SecretKeySpec keySpec = new SecretKeySpec(masterKey, "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] cypherText = aes.encrypt(myJSONString,masterKey);'
什么有效:
- 我可以使用 AES 加密/解密,包括 byte[] 和密码派生密钥(keyderivation(“password”))
- 我可以从配置文件中正确保存和加载。事实上我测试和生成的 Base64encoded(masterKey) 与 Base64.encode(aes.decrypt(Base64.decode(config.getProperty("encrMasterKey")),"password"))) 相同
什么不:
Cipher cipher = Cipher.getInstance("AES");
SecretKeySpec keySpec = new SecretKeySpec(masterKey, "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
在 cipher.init java 抛出非法密钥或默认参数错误。
我真的很感激这个提示,现在一直困扰我好几天,我似乎无法修复它......
最好的祝愿