记一次AES加密解密的痛苦过程

废话不说直接上正文:

开始知道AES加密会有一个长度的限制报错:java.security.InvalidKeyException: Illegal key size,从网上下载对应jdk版本的local_policy.jar和US_export_policy.jar替换Java\jre6\lib\security目录下的两个jar包应该就会消失。确实在本地运行是没有问题的,但是覆盖了服务器上的jar包仍然不行。一直报java.lang.NoClassDefFoundError: javax.crypto.b (initialization failure)的错误。然后从网上一顿搜索,终于找到了答案。
首先说明一下服务器部署是用的IBM Websphere,IBM Websphere默认用的JDK是IBM自己的,所以需要下载IBM对应的无限制加密相关的jar包(通过翻墙从IBM网站上下载),下面为了方便使用共享一下百度云盘的链接:
unrestricted.zip(jdk1.4及以上)建议使用
链接:https://pan.baidu.com/s/1UoWF6WsH8ixjGKzendQOzQ 
提取码:vj69 

unrestrictedpolicyfiles.zip
https://pan.baidu.com/s/1QxxZE8wrh0hkXpnYMzIA8A
提取码:m5ke

这个时候上边错误没有了,但是出现了如下报错
javax.crypto.BadPaddingException: pad block corrupted(通过网上搜索,初步判定是因为秘钥的原因。由于我测试的时候是通过另外一个系统system-A调用的另一个系统system-B,在system-A中加密,system-B中解密,看了看前后加密的秘钥是完全一样的,感到好奇怪,让人费解。)
由于想到前面加密用的一个是oracle的jdk一个是ibm的jdk,难道是同一个key加密同一个密文的结果不一样,然后在服务器上分别用oracle的jdk和ibm的jdk跑了下.class文件,不出所料,结果果然不一样。这可怎么办,如何是好。


附:如何在linux服务器上执行.class文件
1)使用对应的IBM的JDK执行:
/opt/IBM/WebSphere/AppServer/XX...XX/java/jre/bin/java -classpath .:/opt/apps/XXXX/WEB-INF/lib/bcprov-jdk16-1.XX.jar:/opt/apps/XXXXX/XXXX.jar class文件名
2)使用orcale的JDK执行:java/jre/bin/java -classpath .:/opt/apps/XXXX/WEB-INF/lib/bcprov-jdk16-1.XX.jar:/opt/apps/XXXXX/XXXX.jar class文件名

然后又是一通乱搜、纠结中。功夫不负有心人,有人说可以在代码中指定使用sun的jdk对应的provider(sun.security.provider.Sun)
使用方式如下:
Security.addProvider(new sun.security.provider.Sun());
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", new sun.security.provider.Sun());
secureRandom.setSeed(clientSecret.getBytes());
刚开始加入这段代码是可能会报错,此时重新指定一下编译使用的jre即可(project->properties->java build path->libraries)

此时把编译好的class文件发布到服务器上,有可能会报错,因为IBM的JDK的rt.jar文件和oracle的rt.jar文件相差挺大,此时把oracle的rt.jar传到服务器应用的lib文件下即可。
到此system-A的加密和system-B的解密都是用的oracle的jdk的provider,这样就没有问题了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值