记Java中AES加密踩的坑

一、异常

1.java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/PKCS7Padding

在使用AES算法的时候,你可能在
KeyGenerator kgen = kgen = KeyGenerator.getInstance("AES");
或者
Cipher cipher = Cipher.getInstance("AES");
这里报了NoSuchAlgorithmException的异常,那么很好,你进坑了。

如果你有写过Android App,你会发现你平时都是这么干的,但是为什么在Java中就报错了?

上网找了好久,但都没能解决我的问题。最终找到一个比较合理的解释

Android支持PKCS7Padding填充方式,而java默认支持是PKCS5Padding填充方式

这也就大概知道了上面Cannot find any provider supporting AES/CBC/PKCS7Padding是怎么回事,要解决这个问题可以去BouncyCastle下载组件以支持PKCS7Padding填充。

  1. 上BouncyCastle官网
    下载对应JDK版本的jar包,笔者使用的是JDK1.8,所以下载最新版bcprov-ext-jdk15on-159.jar
    这里写图片描述
  2. 把下载的bcprov-ext-jdk15on-159.jar分别复制到

    ${jdk_home}\jre\lib\ext
    (eg:D:\Java\jdk1.8.0_144\jre\lib\ext)
    ${jre_home}\lib\ext
    (eg:D:\Java\jre1.8.0_144\lib\ext)
  3. 修改java.security文件

    ${jdk_home}\jre\lib\security\java.security
    (eg:D:\Java\jdk1.8.0_144\jre\lib\security\java.security)
    ${jre_home}\lib\security\java.security
    (eg:D:\Java\jre1.8.0_144\lib\security\java.security)

    添加Java的默认加密提供者
    security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
  4. 在使用AES前,加入Security.addProvider(new BouncyCastleProvider());
    即可,如果显示该class还没导入,那就手动导入到该工程就好

2.java.security.InvalidKeyException: Illegal key size

参考stack overflow:https://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters

Java密码扩展(JCE)无限强度管辖权策略文件 6
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
Java密码扩展(JCE)无限强度管辖权策略文件7
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
Java密码扩展(JCE)无限强度管辖权策略文件8
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

下载对应的文件后,替换

${jdk_home}/jre/lib/security
${jre_home}/lib/security

目录下的 local_policy.jar 和 US_export_policy.jar 文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

Bryson先森

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值