`
lingmin.guo
  • 浏览: 6566 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JAVA JCE实现HASH+SALT强密文

阅读更多

口令的安全策略
在传统密码学家眼中只有一种加密是理想的,那就是“一次一密”,当然事实上这是不可能的。但如果我们套用这种词法,我们也可以说,口令安全策略的理想境界,我们可以称为单向、一人一密、一站一密。

单向:标准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);

 

 

1
2
分享到:
评论

相关推荐

    基于python开发的腾讯JCE协议解析+源码(毕业设计&课程设计&项目开发)

    基于python开发的腾讯JCE协议解析+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于python开发的腾讯JCE协议解析+源码,适合毕业设计、课程设计、项目...

    Java JCE 出口限制文件

    Java JCE(Java Cryptography Extension)是Java平台标准版(Java SE)的一部分,它提供了高级的加密算法和技术,使得开发者可以构建安全的应用程序。在Java的早期版本中,特别是JDK15、1.6、1.7和1.8,JCE受到出口...

    基于java开发的PCIE加密卡jce接口+源码(毕业设计&课程设计&项目开发)

    基于java开发的PCIE加密卡jce接口+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于java开发的PCIE加密卡jce接口+源码,适合毕业设计、课程设计、项目...

    jce_policy-8 java jce

    4. **密码服务提供者接口 (JSSE)**: JSSE(Java Secure Socket Extension)是JCE的一部分,它提供了实现SSL/TLS协议的API,使得开发者能够构建安全的网络通信。 5. **无限强度加密**: 默认情况下,Java的JCE有加密...

    jce(Java加密扩展)

    1、javax.crypto.Cipher 类提供加密和解密的功能,它构成了 Java Cryptography Extension (JCE) —— Java 加密扩展框架的核心。这些都是 Java JDK 原生的 API,不是第三方的。 2、Cipher 的 getInstance(String ...

    JAVA实现AES算法+界面.zip_AES_AES java 界面_Java Aes界面

    在Java中,我们可以使用Java Cryptography Extension (JCE)库来实现AES。 为了在Java中实现AES加密,我们需要以下步骤: 1. 导入必要的JCE库:`javax.crypto.Cipher`,`javax.crypto.spec.SecretKeySpec` 和 `java...

    Java Cryptography Extension (JCE)

    Java Cryptography Extension (JCE) 是Java平台的一个重要组件,主要负责提供强大的加密算法和安全服务,用于开发安全的应用程序。在Java 8中,JCE扮演着核心角色,允许开发者执行加密操作,如数据加密、解密、数字...

    Oracle官方java jdk JCE无限制权限策略文件.zip 【jce_policy-6到jce_policy-8】

    Oracle官方java jdk JCE无限制权限策略文件。该策略文件均从官网下载。文件清单:JDK2//JDK4/JDK5/JDK6/JDK7/JDK8 的 local_policy.jar、US_export_policy.jar

    Java JCE 8

    jdk8无政策限制权限文件,用于AES加密算法,AES加密扩展包因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制。比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件。 因为某些国家...

    Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files

    总之,Java Cryptography Extension (JCE) 的无限制强度管辖政策文件对于开发者来说是一项重要的工具,它可以解锁更强的加密功能,为Java应用程序提供更高的安全水平。通过正确地安装和配置这些政策文件,开发者可以...

    Java Cryptography Extension (JCE) 无限强度权限策略文件 8

    Java Cryptography Extension (JCE) 是Java平台的一个重要组件,主要负责提供高级的加密功能,支持各种加密算法,包括对称加密、非对称加密、哈希函数和数字签名等。在Java的标准版本中,出于安全性考虑,对于某些...

    JCE无限制权限策略文件

    8. **JCE API**:Java开发者可以利用JCE提供的API来实现加密和解密功能,例如`javax.crypto.Cipher`类用于加解密,`java.security.KeyPairGenerator`用于生成密钥对。 9. **JCE实现**:除了Oracle的JCE实现,还有...

    Java_JCE(Java Cryptography Extension)

    JCE是java加密扩展包,由于美国出口限制规定,JCE对部分国家是限制出口的,致使其加密长度有所缩减,例如,DES算法因受到军事出口限制,目前仅提供56位的密钥长度,而实际安全要求至少要128位。对于出口限制,SUN...

    基于JAVA-JCE的聊天程序的网络安全实现

    这是本人在2009年5月做的一个带即时聊天,文件传输,网上虚拟购物的程序,但更重要的事,是对这些功能加载网络安全功能的实现,主要有加密解密,数字签名,哈稀...用JAVA JCE实现。特放此处供有兴趣者参考。 免资源分。

    压缩包内:jce_policy7 + jce_policy8的jar包

    java illegal key size 错误解决 Java 解密错误InvalidKeyException: Illegal key size 解决方案 如果安装了 JRE 将两个jar文件放到 %JRE_HOME%\lib\security 目录下覆盖原来的文件 如果安装了 JDK 将两个jar文件也...

    jce_policy安装【java密码扩展无限制权限策略文件安装】.zip

    下载解压后,把jar文件上传到需要安装jce机器上JDK或JRE的security目录下,覆盖源文件即可。 JDK:将两个jar文件放到%JDK_HOME%\jre\lib\security下 JRE:将两个jar文件放到%JRE_HOME%\lib\security下 覆盖之前,...

    AES算法详解和基于JCE实现

    软件实现方案可以使用 Java Cryptography Extension(JCE)来实现 AES 算法,而硬件实现方案可以使用专门的加密芯片来实现 AES 算法。 AES 算法的四个步骤 AES 算法的四个步骤分别是: * 字节替换(SubBytes) * ...

    jce-policy-8 JDK8安装JCE无限强度

    Java Cryptography Extension (JCE) 是Java平台中用于加密、解密、签名等安全操作的核心组件。在标准的JDK安装中,JCE有一定的强度限制,特别是在出口管制法规的约束下,某些高强度的加密算法可能被禁用或者性能受限...

    jboss7.1.1下报java.lang.SecurityException: JCE cannot authenticate the provider BC

    标题中的“jboss7.1.1下报java.lang.SecurityException: JCE cannot authenticate the provider BC”是一个典型的Java安全异常,通常发生在尝试使用不受信任的加密提供者时。在这个问题中,"BC"指的是Bouncy Castle...

Global site tag (gtag.js) - Google Analytics