Android AES / ECB / PKCS7PADDING生成关键的充气城堡

时间:2016-12-07 15:39:58

标签: java android bouncycastle

我想使用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();
}

我收到没有这种算法的错误

1 个答案:

答案 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提供商之间的差异。