在我的程序中,我尝试使用AES进行至少50次迭代的纯文本加密。但问题是我得到OutOfMemory错误。从帖子,Recommended # of iterations....我知道LastPass使用100,000次迭代。但是我甚至无法使用AES的50次迭代。更多AES迭代导致OutOfMemory Java堆空间
下面是代码,
static String encrypt(String value, String salt) throws Exception {
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.ENCRYPT_MODE, key);
String valueToEnc = null;
String eValue = value;
for (int i = 0; i < 100; i++) {
valueToEnc = salt + eValue;
byte[] encValue = c.doFinal(valueToEnc.getBytes());
eValue = new BASE64Encoder().encode(encValue);
return eValue;
}
我都知道,使用Base64Encoder
发出警告。所以请不要发布它。我稍后会改变它。
我的问题是有没有任何方法来增加迭代没有得到这个错误?
对不起,如果这是一个愚蠢的问题,任何答复表示赞赏。提前致谢。
这里是异常日志,
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:300)
at java.lang.StringCoding.encode(StringCoding.java:344)
at java.lang.StringCoding.encode(StringCoding.java:387)
at java.lang.String.getBytes(String.java:956)
这里是印刷valueEnc(只是其中的一部分)
TAtYyypIcW2kGWWKWRM1PWYCgi55hVnUqBv3Ze0c93R8tlUykr22xqeTLesPVlyepJv94ME/5JLQ
你确定这是给你一个OOM吗? –
我每次执行都得到它。 6次可能!不知道有多少次:( – user12458
为什么你要多次使用AES?AES是一个对称密码,应该足够安全地使用一次。你链接的问题是关于散列,它有意义的散列值时间来减慢攻击者的速度 –