我想使用AES/ECB/PKCS7PADDING
生成随机密钥,但java不支持PKCS7
填充,在我的算法中我必须使用相同的填充,充气城堡确实支持PKCS7PADDING
但我是无法理解如何使用
我的代码:
Security.addProvider(new BouncyCastleProvider());
private byte[] generateSessionKey() throws NoSuchAlgorithmException, NoSuchProviderException {
KeyGenerator kgen = KeyGenerator.getInstance("AES/ECB/PKCS7PADDING", "BC");
kgen.init(SYMMETRIC_KEY_SIZE);
SecretKey key = kgen.generateKey();
return key.getEncoded();
}
我收到没有这种算法的错误
答案 0 :(得分:1)
AES的密钥生成不需要对填充做任何事情。某些操作模式(如ECB和CBC)需要填充。但密钥本身并不依赖于模式或填充。所以你应该使用:
KeyGenerator kgen = KeyGenerator.getInstance("AES", "BC");
这无疑是有效的。
请勿使用PKCS#7填充,将"PKCS5Padding"
替换为"PKCS7Padding"
。
请查看here以了解填充机制与here之间在Java方面的差异。
我猜Android正在使用一个剥离的Bouncy Castle提供商(这是SpongyCastle被休息的原因之一),这可以解释Android和Java SE提供商之间的差异。