java - 是否可以将 JCE 策略文件与 java 程序捆绑在一起

标签 java cryptography

我想要具有 256 位 key 大小的 GCM 模式的 AES。目前,这会导致:

错误 java.security.InvalidKeyException:非法 key 大小

Apparently ,这是由于密码学的导出限制,我需要安装来自 OracleJava Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files .我认为要求我的应用程序的用户修改他们的 JRE 只是为了运行我的应用程序是太过分了。是否可以将加密扩展策略文件捆绑到我的应用程序中?

最佳答案

我发现这个问题与您的问题非常相似Using encryption that would need Java Policy Files in openjre

但是接受的答案对我不起作用。试试这个

Field gate = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted");
gate.setAccessible(true);
gate.setBoolean(null, false);
Field allPerm = Class.forName("javax.crypto.CryptoAllPermission").getDeclaredField("INSTANCE");
allPerm.setAccessible(true);
Object accessAllAreasCard = allPerm.get(null);
final Constructor<?> constructor = Class.forName("javax.crypto.CryptoPermissions").getDeclaredConstructor();
constructor.setAccessible(true);
Object coll = constructor.newInstance();
Method addPerm = Class.forName("javax.crypto.CryptoPermissions").getDeclaredMethod("add", java.security.Permission.class);
addPerm.setAccessible(true);
addPerm.invoke(coll, accessAllAreasCard);
Field defaultPolicy = Class.forName("javax.crypto.JceSecurity").getDeclaredField("defaultPolicy");
defaultPolicy.setAccessible(true);
defaultPolicy.set(null, coll);

兼容性

  • JRE 7:好的

  • JRE 8 u101:好的

  • JRE 8 u112:失败 无法将静态最终 boolean 字段 javax.crypto.JceSecurity.isRestricted 设置为 (boolean)false

关于java - 是否可以将 JCE 策略文件与 java 程序捆绑在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41615142/

相关文章:

java - 有没有针对不同语言的稳定的序列化方法?

java - ECC加密解密中的Base64编码/解码

java - 如何在链接列表中显示与用户从 JOptionPane 输入相匹配的结果?

java - 如何在Piccolo2D中接收键盘事件?

java - Opencsv - 如何获取仅在双引号外用逗号分隔的值,同时忽略双引号?

php - 如何使用 php 加密大文件并通过命令行解密?

JavaScript 密码学库

java - 如何配置 tomee 通过 https 运行?

java - 无堆栈信息 - V(来源未知)

encryption - 如何将消息变成多项式?