我最近遇到了一段代碼,它在CBC模式下使用帶有AES的BouncyCastle PBE(「PBEWithSHA1And256BitAES-CBC-BC」)。Bouncy Castle在CBC模式下使用AES進行基於密碼的加密
public static final String ALGORITHM = "PBEWithSHA1And256BitAES-CBC-BC";
public static byte[] encrypt(final byte[] key, final byte[] salt, final byte[] plainText) throws CryptoException {
try {
// Create the encryption key
final SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM, "BC");
final PBEKeySpec keySpec = new PBEKeySpec(new String(key).toCharArray());
final SecretKey secretKey = keyFactory.generateSecret(keySpec);
// Encrypt the plain text
final PBEParameterSpec cipherSpec = new PBEParameterSpec(salt, ITERATIONS);
final Cipher cipher = Cipher.getInstance(ALGORITHM, "BC");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, cipherSpec);
final byte[] encryptedBytes = cipher.doFinal(plainText);
return encryptedBytes;
} catch (final Throwable t) {
throw new CryptoException(t.toString());
}
}
正如您所見,此代碼沒有指定正確的IV來執行AES CBC加密。
我不知道如何指定salt,迭代次數和要使用的密碼爲的密碼。
我該怎麼做?
謝謝。
你是什麼意思,你不知道如何指定salt和迭代次數?你不是已經這樣做了嗎? –
我知道如何指定salt和迭代次數,這些迭代次數用於從用戶指定的密碼中生成強大的派生加密密鑰。一旦導出了加密密鑰,它將用於在CBC模式下使用AES加密數據。 由於模式是CBC,我們想指定一個IV,我不知道如何! – jsanchez
我的答案不夠?或者你不明白?我很高興你至少對你的問題進行了跟進,雖然13天有點時間...... –