Java AES使用Bouncy Castle提供程序加密/解密

Java AES使用Bouncy Castle提供程序加密/解密,java,cryptography,aes,bouncycastle,Java,Cryptography,Aes,Bouncycastle,以下是我使用JDK 5的本机库开发的AES 256加密和解密的实现: public static String encrypt(String key, String toEncrypt) throws Exception { Key skeySpec = generateKeySpec(key); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

以下是我使用JDK 5的本机库开发的AES 256加密和解密的实现:

public static String encrypt(String key, String toEncrypt) throws Exception {
    Key skeySpec = generateKeySpec(key);
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    byte[] encrypted = cipher.doFinal(toEncrypt.getBytes());
    byte[] encryptedValue = Base64.encodeBase64(encrypted);
    return new String(encryptedValue);
}

public static String decrypt(String key, String encrypted) throws Exception {
    Key skeySpec = generateKeySpec(key);
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    byte[] decodedBytes = Base64.decodeBase64(encrypted.getBytes());
    byte[] original = cipher.doFinal(decodedBytes);
    return new String(original);
}
我想用Boucy Castle API(Java)实现相同的方法:我搜索了很多,测试了很多,没有结果。。。有人能帮我吗

谢谢

您可以使用

Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES", "BC");
否则

Cipher cipher = Cipher.getInstance("AES", new BouncyCastleProvider());

也就是说,
Cipher.getInstance(“AES”)
使用,这是不安全的。您需要密码块链接(
Cipher.getInstance(“AES/CBC/PKCS5Padding”)
)或计数器(
Cipher.getInstance(“AES/CTR/NoPadding”)
)模式;它们都是安全的,主要区别在于CBC需要填充,而CTR不需要。

您确实意识到您将使用相同的API,但只是使用不同的提供程序,对吗?无论如何,请阅读。注意,在Oracle的所有Java版本中,AES256在默认情况下都是禁用的。您必须为Java 5安装Java加密扩展(JCE)无限强度权限策略文件。顺便说一句:Java5已经过时并且不安全。别再用了,我知道,罗伯特,谢谢。Perception,我想使用Bounny Castle,因为它比Java的本机库(仅来自JDK 6+)更具可移植性是的,这是一个重复,但答案非常稀疏。当然,它是重复的,但场景不同。