【发布时间】:2011-12-16 12:39:15
【问题描述】:
我最近遇到了一段代码,它在 CBC 模式下使用 BouncyCastle 的 PBE 和 AES(“PBEWithSHA1And256BitAES-CBC-BC”)。
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 加密。
我不知道如何为密码指定盐、迭代次数和要使用的 IV。
我应该怎么做?
谢谢。
【问题讨论】:
-
什么意思,你不知道如何指定盐和迭代次数?你不是已经这样做了吗?
-
我知道如何指定盐和迭代次数,它们用于从用户指定的密码生成强派生加密密钥。导出该加密密钥后,它将用于在 CBC 模式下使用 AES 加密数据。由于模式是 CBC,我们想指定一个我不知道怎么做的 IV!
-
我的回答不够?还是你不明白?我很高兴你至少跟进你的问题,虽然 13 天有点时间......
标签: java encryption aes bouncycastle