fik*_*Raf 8 java cryptography bouncycastle aes
这是我使用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);
}
Run Code Online (Sandbox Code Playgroud)
我想用Boucy Castle API(Java)实现相同的方法:我搜索了很多,测试了很多,没有结果......有人可以帮我吗?
谢谢
Zim*_*oot 22
你会使用
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES", "BC");
Run Code Online (Sandbox Code Playgroud)
要不然
Cipher cipher = Cipher.getInstance("AES", new BouncyCastleProvider());
Run Code Online (Sandbox Code Playgroud)
也就是说,Cipher.getInstance("AES")使用电子密码本,这是不安全的.你要么想要Cipher Block Chaining(Cipher.getInstance("AES/CBC/PKCS5Padding"))或Counter(Cipher.getInstance("AES/CTR/NoPadding"))模式; 它们都是安全的,主要区别在于CBC需要填充而CTR不需要填充.
| 归档时间: |
|
| 查看次数: |
37400 次 |
| 最近记录: |