我早些时候曾问过一个问题,但没有得到正确的回答,也无济于事。

因此,我澄清了有关该问题的一些细节,我真的很想听听您关于如何解决此问题或应该尝试的想法。

我在Linux服务器上安装了Java 1.6.0.12 ,下面的代码运行得很完美。

String key = "av45k1pfb024xa3bl359vsb4esortvks74sksr5oy4s5serondry84jsrryuhsr5ys49y5seri5shrdliheuirdygliurguiy5ru";

try {

Cipher c = Cipher.getInstance("ARCFOUR");

SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "ARCFOUR");

c.init(Cipher.DECRYPT_MODE, secretKeySpec);

return new String(c.doFinal(Hex.decodeHex(data.toCharArray())), "UTF-8");

} catch (InvalidKeyException e) {

throw new CryptoException(e);

}

今天,我在服务器用户上安装了Java 1.6.0.26 ,当我尝试运行应用程序时,出现以下异常。 我的猜测是它与Java安装配置有关,因为它在第一个版本中有效,但在更高版本中不起作用。

Caused by: java.security.InvalidKeyException: Illegal key size or default parameters

at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]

at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]

at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]

at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]

at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]

at my.package.Something.decode(RC4Decoder.java:25) ~[my.package.jar:na]

... 5 common frames omitted

第25行是: c.init(Cipher.DECRYPT_MODE, secretKeySpec);

笔记:

*服务器1.6.0.12 java目录上的java.security与1.6.0.26 java.security文件几乎完全匹配。 第一个中没有其他提供程序。

*上一个问题在这里 。

#1楼

对于JAVA 7,下载链接为jce-7-download

将两个下载的jar复制到Java \\ jdk1.7.0_10 \\ jre \\ lib \\ security中

备份较旧的罐子,以确保安全。

对于JAVA 8,下载链接为jce-8-download

将下载的jar复制到Java \\ jdk1.8.0_45 \\ jre \\ lib \\ security中

备份较旧的罐子,以确保安全。

#2楼

可以在以下位置找到JRE / JDK / Java 8管辖区文件:

就像詹姆斯在上面说的那样:

将文件安装在${java.home}/jre/lib/security/ 。

#3楼

问题是如果安装JRE,则文件夹jre \\ lib \\ security中local_policy.jar中文件default_local.policy的内容 :

// Some countries have import limits on crypto strength. This policy file

// is worldwide importable.

grant {

permission javax.crypto.CryptoPermission "DES", 64;

permission javax.crypto.CryptoPermission "DESede", *;

permission javax.crypto.CryptoPermission "RC2", 128,

"javax.crypto.spec.RC2ParameterSpec", 128;

permission javax.crypto.CryptoPermission "RC4", 128;

permission javax.crypto.CryptoPermission "RC5", 128,

"javax.crypto.spec.RC5ParameterSpec", *, 12, *;

permission javax.crypto.CryptoPermission "RSA", *;

permission javax.crypto.CryptoPermission *, 128;

};

如果您不需要全球有效的设置,则只需编辑此文件并将内容更改为

// Country-specific policy file for countries with no limits on crypto strength.

grant {

// There is no restriction to any algorithms.

permission javax.crypto.CryptoAllPermission;

};

如果从Oracle下载JCE,这将得到什么。

#4楼

在Java中,默认情况下AES支持128位密钥,如果您计划使用192位或256位密钥,则Java编译器将抛出非法的密钥大小异常,您将得到该异常。

该解决方案是根据victor&James的建议,您需要根据您的JRE版本(java6,java7或java8)下载JCE(Java密码学扩展)。

JCE压缩文件包含以下JAR:

local_policy.jar

US_export_policy.jar

您需要从/jre/lib/security替换这些jar。 如果您使用的是Unix系统,则可能会参考/home/urs/usr/lib/jvm/java--oracle/

有时仅替换安全文件夹中的local_policy.jar和US_export_policy.jar在Unix上不起作用,所以我建议首先将安全文件夹复制到您的桌面,替换jar的@ Desktop / security文件夹,从/ jre / lib中删除安全文件夹/&将桌面安全文件夹移动到/ jre / lib /。

例如:: sudo mv security /usr/lib/jvm/java-7-oracle/jre/lib

#5楼

默认情况下,Java仅支持AES 128位(16字节)密钥大小进行加密。 如果您不需要的只是默认支持,则可以在使用Cipher之前将密钥修整为适当的大小。 有关默认支持的键,请参见javadoc 。

这是生成无需修改策略文件即可在任何JVM版本上使用的密钥的示例。 自行决定使用。

这是一篇关于AgileBits博客上密钥128到256密钥大小是否重要的​​好文章

SecretKeySpec getKey() {

final pass = "47e7717f0f37ee72cb226278279aebef".getBytes("UTF-8");

final sha = MessageDigest.getInstance("SHA-256");

def key = sha.digest(pass);

// use only first 128 bit (16 bytes). By default Java only supports AES 128 bit key sizes for encryption.

// Updated jvm policies are required for 256 bit.

key = Arrays.copyOf(key, 16);

return new SecretKeySpec(key, AES);

}

java安全密钥_Java安全性:密钥大小或默认参数非法?相关推荐

  1. java 获取屏幕_java 获取屏幕大小

    使用JavaAWT类可以很方便取得屏幕分辨率及可用屏幕大 使用Java AWT类可以很方便取得屏幕分辨率及可用屏幕大小. 01.Dimension scrSize=Toolkit.getDefault ...

  2. java发送文件_java 模拟http发送文件和参数

    一.maven: org.apache.httpcomponents httpmime 4.5.3 二.工具类: import java.io.File; import java.util.Map; ...

  3. java 设置系统参数_Java如何设置系统参数和运行参数

    系统参数 系统级全局变量,该参数在程序中任何位置都可以访问到.优先级最高,覆盖程序中同名配置. 系统参数的标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格 ...

  4. java 泛型 get()_Java泛型,get类的泛型参数

    类型安全的,但是可行的方式是通过类< T>令牌"编译器可以看到它": public abstract class RootProcessor { Class clazz ...

  5. java scanner构造函数_Java使用Scanner作为构造函数的参数

    这是一个学校作业的问题,这就是我这样做的原因. 无论如何,我在主方法中使用Stdin制作扫描仪(Scanner stdin = new Scanner(System.in);是行),从程序运行时指定的 ...

  6. java jceks 密钥_Java中不同类型的密钥库(Keystore) – 概述

    阅读: 877 密钥库是用于存储加密密钥和证书的存储工具 ,最常用于SSL通信,以证明服务器和客户端的身份.密钥库可以是文件或硬件设备.有三种类型的条目可以存储在密钥库中,取决于密钥库的类型,这三种类 ...

  7. java 生成对称密钥_Java中创建对称密钥的代码

    1 加密 public static byte[] jiami() throws Exception { //密钥生成器 KeyGenerator key=KeyGenerator.getInstan ...

  8. java常见证书类型和密钥库类型

    一 .证书类型 1>证书概念: 证书是对现实生活中 某个人或者某件物品的价值体现 比如古董颁发见证书 ,人颁发献血证等 通常证书会包含以下内容 证书拥有者名称(CN),组织单位(OU)组织(O) ...

  9. 128位java_求一个java算法,用128位密钥的AES加密128位明文,得出的密文还是128位...很着急,非常感谢各位大神,求救!...

    求一个java算法,用128位密钥的AES加密128位明文,得出的密文还是128位...很着急,非常感谢各位大神,求救! 关注:157  答案:1  mip版 解决时间 2021-02-03 09:1 ...

最新文章

  1. 优达学城《DeepLearning》2-5:风格迁移
  2. Xcode 添加代码块
  3. 有 Bug 不会调试 ? 这篇文章很详细 !
  4. python基础-userlist、userdict、userstring
  5. php 传递resource参数,php define的第二个参数使用方法_php技巧 - is_resource
  6. 心情的旅行- 让自己慢下来(46)
  7. 「MacOS鼠标操作技巧」如何设置鼠标”的速度、滚动方向等配置?
  8. IAR的View视图菜单中Watch、 Live Watch、 Quick Watch、 Auto、 Locals、 Statics这几个子菜单的含义和区别
  9. redis学习之redis的发布和订阅
  10. openstack placement
  11. 暴力解决Centos6YUM下Loaded plugins: fastestmirror Determining fastest mirror和Could not retrieve mirro
  12. excel文件被写保护怎么解除_excel撤销写保护的教程
  13. 读《卓有成效的管理者-德鲁克》
  14. 指南|研控MCC系列运动控制卡测试软件(YK-Motion )使用手册
  15. Q1利润不及预期股价仍大涨,疫情“摧残”下Facebook求生有新机?
  16. Android 增量更新实战
  17. 记录一下网络爬虫实战scrapy---某蜜蜂网站
  18. 震惊! 某男子一夜之间竟把codeforces题库刷穿
  19. 什么是电商运营(1)?
  20. File Browser安装及命令用法

热门文章

  1. flask导入flask-sqlalchemy的一个问题记录
  2. 总结Android开发中必备的代码Review清单
  3. android 温度传感器获取温度,Android 温度传感器返回当前的温度
  4. java声明代码是什么_java安全编码指南之:声明和初始化说明
  5. 2017江苏事业单位计算机类,2017年上半年江苏事业单位计算机岗真题
  6. GCC和TCC编译TCC
  7. OpenShift 4 - 为集群配置镜像签名功能,只能运行被签名的本地镜像
  8. 使用TensorFlow.js在浏览器中进行深度学习入门
  9. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第3天
  10. odoo10参考系列--测试模块