Encrypt/Decyrypt - 密码 - JceSecurity 限制

Encrypt/Decyrypt - Cipher - JceSecurity Restriction

我正在尝试使用 javax.crypto.Ciper encrypt/decrypt 数据,其中我已将转换为 AES/ECB/PKCS5Padding。

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

仔细分析检查Cipher.java里面的代码,发现问题出在系统检查JceSecurity.isRestricted()时的下面方法Cipher-initCryptoPermission()

在我的本地计算机中,JceSecurity.isRestricted() returns FALSE,但是当它 运行 在服务器上时,相同的方法 returns TRUE。由于服务器上的这个原因,系统没有为Cipher分配正确的权限。

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

在做 deep-diving 时,我找到了真正的问题和解决方案。

Java_home/jre/lib/security 下有两个 jar 文件,local_policy.jar 和 US_export_policy.jar。在local_policy.jar里面,有一个叫做default_local.policy的文件,里面其实存放着密码学的所有权限

在我的本地机器上,文件有 AllPermission,因此 JceSecurity 对我来说没有限制,允许我使用 AES 加密算法,但在服务器上,它的版本有限,由 Java 提供捆绑。

用无限制(或无限权限)替换 local_policy.jar 成功了。

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

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