口令的安全策略
在传统密码学家眼中只有一种加密是理想的,那就是“一次一密”,当然事实上这是不可能的。但如果我们套用这种词法,我们也可以说,口令安全策略的理想境界,我们可以称为单向、一人一密、一站一密。
单向:标准HASH算法的价值尽管在这个场景下,已经被推倒,但其单向性的思想依然是正确的,口令只要是能还原的,就意味着攻击者也能做到这一点,从而失去了意义,因此使用单向算法是必须的。
一人一密:同一个站点设置同样口令的不同用户,加密生成的密文内容并不相同。这样就能有效的应对结果碰撞和统计攻击。采用字典的攻击的方法基本是不收敛的。
一站一密:仅仅保证一人一密是不够的,还要保证使用同样信息、同样口令去注册不同网站的用户,在不同站点的口令加密结果是不同的。鉴于有大量用户用同样的信息、同样的口令去注册不同网站,如果能做到这一点,流失出的库信息会进一步打折扣。而攻击者基本会放弃生成密文字典的尝试。
实现这些说起来很简单,依然是HASH+SALT,关键在于每个站点要有不同的SALT,每个用户要有不同的盐。
具体实现
怎么来具体实现一站一密、一人一密的策略呢,在Java 6 中已支持使用JCE(JavaTM Cryptography Extension )实现PBKDF2加密算法。
在使用JCE之前须安装JCE Unlimited Strength Policy,步骤如下:
1、到 Java JCE下载(http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html);
2、解压缩ZIP;
3、将local_policy.jar and和US_export_policy.jar复制到JAVA_HOME/jre/lib/security。
安装好了,就可以用了,代码如下:
String systemPassword = "password"; //一站一密
String userPassword = "User Password"; //用户密码
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] salt = new byte[16];
SecureRandom random = new SecureRandom();
random.nextBytes(salt); // 一人一粒‘盐’
KeySpec spec = new PBEKeySpec(systemPassword.toCharArray(), salt, 1024, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
//加密逻辑
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters params = cipher.getParameters();
byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
byte[] ciphertext = cipher.doFinal(userPassword.getBytes("UTF-8"));
//保存IV,解密时需要
String ivStr = new BigInteger(iv).toString(16);
System.out.println("IV: " + ivStr);
//保存Encrypted Data,解密时需要
String encryData = new BigInteger(ciphertext).toString(16);
System.out.println("Encrypted Data: " + encryData);
//解密逻辑
KeySpec dspec = new PBEKeySpec(systemPassword.toCharArray(), salt, 1024, 256);
SecretKey dsecretKey = new SecretKeySpec(factory.generateSecret(dspec).getEncoded(), "AES");
Cipher dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
dcipher.init(Cipher.DECRYPT_MODE, dsecretKey,
new IvParameterSpec(new BigInteger(ivStr, 16).toByteArray()));
String plaintext = new String(dcipher.doFinal(new BigInteger(encryData,16).toByteArray()),"UTF-8");
//有了解密后的文本,只需和用户输入的密码比对就可以了
System.out.println(plaintext);
分享到:
相关推荐
JCE,Java Cryptography Extension 1.8, java jce8 java jce
JAVA 加密 JCE Java密码扩展的基础 关于JCE的基础
这是本人在2009年5月做的一个带即时聊天,文件传输,网上虚拟购物的程序,但更重要的事,是对这些功能加载网络安全功能的实现,主要有加密解密,数字签名,哈稀...用JAVA JCE实现。特放此处供有兴趣者参考。 免资源分。
java illegal key size 错误解决 Java 解密错误InvalidKeyException: Illegal key size 解决方案 如果安装了 JRE 将两个jar文件放到 %JRE_HOME%\lib\security 目录下覆盖原来的文件 如果安装了 JDK 将两个jar文件也...
JCE是java加密扩展包,由于美国出口限制规定,JCE对部分国家是限制出口的,致使其加密长度有所缩减,例如,DES算法因受到军事出口限制,目前仅提供56位的密钥长度,而实际安全要求至少要128位。对于出口限制,SUN...
Java加密扩展的出口限制文件,包含JDK15、1.6、1.7、1.8各版本的文件。US_export_policy.jar local_policy.jar
Oracle官方java jdk JCE无限制权限策略文件。该策略文件均从官网下载。文件清单:JDK2//JDK4/JDK5/JDK6/JDK7/JDK8 的 local_policy.jar、US_export_policy.jar
Java Cryptography Extension (JCE) 无限强度权限策略文件 8 下载 Java Cryptography Extension 让应用能够使用更强大的标准算法。
jce_policy-8,JCE(Java Cryptography Extension)是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。 它提供对对称、不对称、块和流密码的加密支持,它还支持...
下载解压后,把jar文件上传到需要安装jce机器上JDK或JRE的security目录下,覆盖源文件即可。 JDK:将两个jar文件放到%JDK_HOME%\jre\lib\security下 JRE:将两个jar文件放到%JRE_HOME%\lib\security下 覆盖之前,...
jdk8无政策限制权限文件,用于AES加密算法,AES加密扩展包因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制。比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件。 因为某些国家...
Java密码扩展,用于加密、密钥生成和协商以及MAC算法的框架和实现。
(java加密解密)如何实现JCE接口的各种算法 jce加密解密 很好的资料 很详细
在与银联的对接中,调试过程中报错或使用类似登入加密:java.lang.SecurityException: JCE cannot authenticate the provider BC 进行问题解决,里面包含 bcprov-jdk16-143.jar与bcprov-jdk15-135.jar与具体文件存放...
java加解密无限制包,适用于JDK 8 ,JRE 8 。java能支持大部分的算法,但是受到出口限制,密钥长度不能满足需求。不过可以通过覆盖权限文件local_poblicy.jar和US_export_policy.jar取消相应限制。
1、javax.crypto.Cipher 类提供加密和解密的功能,它构成了 Java Cryptography Extension (JCE) —— Java 加密扩展框架的核心。这些都是 Java JDK 原生的 API,不是第三方的。 2、Cipher 的 getInstance(String ...
jdk8加密使用的jce_policy-8替换原jar包
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files java 8的权限文件
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 包含版本6、7、8的权限文件
1. 国密算法的JCE实现,SM2、SM3、SM4算法,以及国密证书和密钥存储的DCKS文件格式 2. 适用于JDK7及以上 3. 适用于Android API 21平台及以上 4. 导出的PEM数据格式与OPENSSL保持一致,新增可导入的私钥格式