我想对我需要存储在平面文件中的密码进行加密,以便由我的Java应用程序访问。我用this question的接受答案来模拟我的解决方案,并且它工作。由于我对加密算法几乎一无所知,一旦我读到DES的弱点,我想选择另一种算法,并且我选择了PBEWithHmacSHA256AndAES_256
。当我使用PBEWithMD5AndDES
,使用Java中的PBEWithHmacSHA256AndAES_256加密要存储在文件中的密码
pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(SALT, 20));
....
pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(SALT, 20));
足以对字符串进行解密,但这个算法我得到这个异常:
java.security.InvalidAlgorithmParameterException: Missing parameter type: IV expected
at com.sun.crypto.provider.PBES2Core.engineInit(PBES2Core.java:252)
at javax.crypto.Cipher.implInit(Cipher.java:806)
at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
at javax.crypto.Cipher.init(Cipher.java:1396)
at javax.crypto.Cipher.init(Cipher.java:1327)
,我能得到解密工作的唯一途径是,如果我通过加密密码算法参数来解密一个,比如这个:
pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(SALT, 20));
AlgorithmParameters ap = pbeCipher.getParameters();
....
pbeCipher.init(Cipher.DECRYPT_MODE, key, ap);
因为我需要能够如果应用程解密这并不为我工作同时重新启动。 所以,我的问题:这就是这个算法应该如何工作,在这种情况下,我应该选择一个更强大的(或者我应该打扰一切),还是我做错了什么?
当你使用旧的代码与新的加密参数时,你会得到什么异常? – gusto2
@GabrielVince我已经更新了例外的问题。 – Mitio