密码学研究-密钥长度限制
引入:
在我们加密解密过程中,因为我上次在维基百科上看到一篇文章http://en.wikipedia.org/wiki/Advanced_Encryption_Standard说,AES的加密方式支持的密钥是128位,192位和256位 ,而实际应用中,如果我用128位的AES密码加密,则没问题:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public static void main(String[] args) throws Exception {
//我们演示加密解密字符串
System.out.println( "加密解密字符串:" );
String stringNeedEncrypt= "加密这段文本" ;
System.out.println( "被加密的文本为:" +stringNeedEncrypt);
//产生一个密钥
KeyGenerator keyGen = KeyGenerator.getInstance( "AES" );
keyGen.init( 128 );
Key key=keyGen.generateKey();
System.out.println( "\n加密使用的密钥为:" +( new BASE64Encoder()).encode(key.getEncoded()));
System.out.println( "加密使用的算法为:" +key.getAlgorithm());
//加密字符串过程
System.out.println( "\n开始加密字符串..." );
byte [] encryptedValue = EncryptUtil.encryptString(stringNeedEncrypt, key);
System.out.println( "加密后的密文为:" +( new BASE64Encoder()).encode(encryptedValue));
//解密字符串过程
System.out.println( "\n开始解密字符串..." );
String decryptedString = EncryptUtil.decryptString(encryptedValue, key);
System.out.println( "解密后还原的字符串为:" +decryptedString);
}
|
显示结果为:
但是,如果我们把代码的第11行 ,keyGen.init改为256(也就是希望密码长度为256位),那么则会抛出以下的异常:
这是为什么呢?
解决:
这个问题是因为美国在用于加密的密钥上对于出口做了限制,它不提供很长的,非常高强度的密钥
因为我们的jdk版本是1.6
所以去http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html下载不限制密钥长度的策略文件。
接受完许可证协议后,下载jce_policy-6.zip文件到本地:
解压完毕后,吧其中的local_policy.jar和US_export_policy.jar 覆盖掉%JAVA_HOME%/jre/lib/security目录下的同名文件:
然后重新运行下我们的应用,就成功了。
分析:
为什么这种方法是可以呢?答案肯定在我们复制的2个jar文件中。
我们先比较下local_policy.jar文件的内容。
对于限制密钥强度的版本的local_policy.jar文件,在其中default_local.policy文件如下:
此外,还多一个文件叫exempt_local.policy文件,其内容为:
在MANIFEST.MF中,标识出密码强度(Crypto-Strength)为limited.
对于不限制密钥强度的版本的local_policy.jar文件,在其中的default_local.policy文件如下:
在MANIFEST.MF中,标识出密码强度(Crypto-Strength)为unlimited.
我们再比较下US_export_policy.jar文件中的内容:
对于限制密钥强度的版本的US_export_policy.jar文件,在其中default_local.policy文件如下:
对于非限制密钥强度的版本的US_export_policy.jar文件,在其中的default_local.policy文件如下:
所以,从上面可以看出,在默认的jdk提供的JCE policy文件和我们单独下载的无限制密钥强度的JCE policy文件,对于US_export_policy.jar文件是几乎完全一样的。只有local_policy.jar不同。其中默认JDK提供的是有密钥限制的。
那么这文件怎么读呢?我们从http://pages.cs.wisc.edu/~horwitz/java-docs/guide/security/jce/JCERefGuide.html中找到了答案。
其中,从最后一个permissionjavax.crypto.CryptoPermisson * ,128条目可以看出,在限制密钥强度版本,任意算法的密钥强度最多是128位,这就是为什么我们用128位可以正常工作,但是我们用256位就会报错。当我们用不受限密钥强度的local_policy.jar替换的时候,它的permission变成了 permissionjavax.crypto.CryptoAllPermission; 这表明对任意算法,密钥长度不受限制。
在运行时,当application/applet类通过getInstance()方法实例化Cipher类时,然后如果应用有相关联的permissionpolicy文件,则JCE 会检查permission policy 文件是否有一些条目,适用于getInstance()调用中相应的算法。如果有,则进行permission check,放行或者拒绝这次实例化。
密码学研究-密钥长度限制相关推荐
- 在密码学研究方面不断创新突破—— 女密码学家的成功密码
随着信息技术的大规模应用和数字经济的加速发展,密码学的重要性日益凸显.近年来,一位土生土长的中国女密码学家备受瞩目,她就是荣获2019年未来科学大奖的首位女科学家,清华大学和山东大学双聘教授王小云. ...
- 计算机信息安全密码学研究,密码学是对信息安全各方面的研究,能够解决所有信息安全的问题。() - 试题答案网问答...
相关题目与解析 密码学作为信息安全的关键技术,其安全目标主要包括三个非常重要的方面:保密性.完整性和可用性.()是指所有资源只能由授权方式以授权的方式进行修改,即信息未经授权不能进行改变的特性. 密码 ...
- 密码学研究-加密解密
引入: 现在我们来研究密码学的加密解密过程,这个十分重要,因为它是明文到密文的桥梁,从类型上分,我们又分为加密解密字符串和加密解密文件,我们这文章就讲解这些细节,主要的核心类是Cipher类. 实践: ...
- 密码学研究-Provider
引入: Provider 是研究密码学的第一步,它表示了对于JAVA安全框架的一种实现.对于JDK,它有许多默认的实现,当然了,你也可以不满意其默认的实现,而使用第三方或者自己根据API 开发SPI ...
- 密码学研究-玩转密钥
引入: 在我们的博客:http://supercharles888.blog.51cto.com/609344/1313864中可以看到,对于加密解密,最重要的是密码,因为从加密方式上来看,有对称加密 ...
- 密码学研究-数字签名
引入: 提到签名,大家都不陌生,大家知道,重大的文件一般都要领导签名,来确保这个文件的真实有效.而一些比较重要的合同,比如买房的购房合同,都要盖"骑缝章",这个骑缝章,就是盖在2页 ...
- 常用MD5解密工具,仅限于密码学研究
http://www.pdtools.net/tools/md5.jsp https://www.cmd5.com/收费的 https://www.somd5.com/免费的
- Conflux研究总监杨光:从现代密码学到区块链
"It must not be required to be secret, and it must be able to fall into the hands of the enemy ...
- 图灵奖获得者、信息安全常青树Adi Shamir:从密码学到AI对抗性样本研究|智源大会嘉宾风采...
来源:智源大会 导读:RSA 算法是通信.金融产业中被广泛使用的安全基本机制,是信息时代的支柱技术.而在这个跨时代算法背后的设计者之一,正是密码学先驱 Adi Shamir.除了RSA 公钥密码算法以 ...
最新文章
- 搜索引擎语法简介 google shodan censys zoomeye fofa dnsdb
- 处理数字_4_计算某列的总和
- CheckBox in ListView
- BetterFE 前端技术周刊 - 2019/04/15
- 基于matlab的语音信号基本处理系统,基于matlab的语音信号处理及分析
- 前端学习(2961):前一天回顾
- thymeleaf 模板语言简介
- MFC工作笔记0005---::在vc++中是什么意思
- 使用ByteArrayOutputStream解决IO乱码问题的踩坑记录
- linux快速安装mysql教程
- 如何添加CDN加速域名
- 大数据应用的典型案例
- macbook pro开机后自动关机
- Python实现BT种子转化为磁力链接【实战】
- Ctrl+26个英文字母组合的Excel快捷键,都是最常用的快捷键!
- 一文读懂知识图谱的主要技术
- 50种网络故障及解决方法
- 2006-2020年10月各类型国债利率
- Servlet 动态Web项目-eclipse中,添加新servlet选择Tomcat无法下一步、无法启动Tomcat
- 硬件学习、高速dsp开发板制作、STM32学习笔记
热门文章
- android audiotrack权限,Android中AudioRecord和AudioTrack的使用注意
- v8 编译 linux,安装与编译 Javascript V8 Engine
- 根据文法画出语法树_更多确定子句语法
- 网页连接不上java服务端,用Java插入IP时无法连接到服务器
- 类的初始化列表_探索未知种族之osg类生物---渲染遍历之draw函数二
- irobot扫地机器人 电压_iRobot评测!扫地机器人究竟能有多好用?
- 【AI基础】OpenCV,PIL,Skimage你pick谁
- 全球及中国霍乱菌苗行业模式分析及前景发展规划建议报告2022-2027年版
- 金谷诺亚携华人文交所 经信研究·李刚:打造元宇宙数字商城
- 谋定新型农业主体-农业大健康·万祥军:农业高质量发展规划