単純な暗号化および復号化 AES を実行しようとしていますが、ソルティングを使用しようとしていました。これらの値は DB に格納され、そこから取得されます。(ハッシュは使えません) とりあえず静的キーと静的ソルトを使っています。
私の質問は、塩漬けを何回繰り返せばよいですか? つまり、DB に値を保存する必要があり、2 回の反復 (128 ビット キー、42 ビット ソルト) で、40 文字に対して 152 文字の暗号化された文字列が得られることがわかります。4 回の反復では 40 文字で 364 文字、8 回の反復では 40 文字で 1536 文字、16 回の反復では 40 文字で 19968 文字という馬鹿げた数字です。
では、最適な反復回数はいくつになるでしょうか?
public static String AESencrypt(String value) 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 < ITERATIONS; i++) {
valueToEnc = salt + eValue;
byte[] encValue = c.doFinal(valueToEnc.getBytes());
eValue = new BASE64Encoder().encode(encValue);
}
return eValue;
}
public static String AESdecrypt(String value) throws Exception {
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.DECRYPT_MODE, key);
String dValue = null;
String valueToDecrypt = value;
for (int i = 0; i < ITERATIONS; i++) {
byte[] decordedValue = new BASE64Decoder().decodeBuffer(valueToDecrypt);
byte[] decValue = c.doFinal(decordedValue);
dValue = new String(decValue).substring(salt.length());
valueToDecrypt = dValue;
}
return dValue;
}