2016-01-19 78 views
0

我试图使用javax.crypto.Ciper加密/解密数据,其中我已经给出了AES/ECB/PKCS5Padding转换。加密/解密 - 密码 - Jce安全限制

我的问题是当我在本地机器上运行代码时,加密/解密工作正常,但是当我在服务器上运行相同的代码时,系统在Cipher.init(“AES/ECB/PKCS5Padding”)期间抛出异常。

在进行详细分析并检查Cipher.java中的代码时,我发现问题出在以下方法Cipher-initCryptoPermission()当系统检查JceSecurity.isRestricted()时。

在我的本地机器中,JceSecurity.isRestricted()返回FALSE,但是当它在Server上运行时,同样的方法返回TRUE。由于服务器上的这一点,系统不会为密码分配正确的权限。

不确定,确切地说JceSecurity限制被设置。感谢你的帮助。

回答

0

在做深度潜水时,我发现真正的问题和解决方案。

在Java_home/jre/lib/security下有两个jar文件local_policy.jar和US_export_policy.jar。在local_policy.jar中,有一个名为default_local.policy的文件,它实际上存储了加密的所有权限。

在我的本地计算机上,文件具有AllPermission,因此我没有JceSecurity的限制,并且允许使用AES加密算法,但在服务器上它具有Java bundle提供的有限版本。

替换local_policy.jar没有限制(或无限制的权限)做了诀窍。

在阅读Internet上的更多信息后发现,Java为受限制版本提供了下载软件包,因为有些国家/地区对使用cyptography算法的类型有限制,因此您必须在更换jar文件之前与您的组织进行核对。

可以在以下位置的Oracle(Java)站点上找到没有限制的Jar文件。 Download link