/**
* 随机字符串集
*/
private static final String CHARACTORS = "efghxxxx";
/**
* 随机长度范围 6表示0~6
*/
private static final int RANDOM_LENGTH = 6;
/**
* 深度加密
*
* <br>
*
*
* @param plain 明文,待加密串
* @param salt 盐
* @return String 加密字符串
* @version V1.0
* @throws Exception
*/
public static String encrypt(String plain, String salt) {
if (StringUtils.isEmpty(salt)) {
log.error("salt是空值");
throw new IllegalArgumentException("salt是空值");
}
// 明文通过HMacSHA1 由动态key hash得到simple串
String simple = HMacSHA1.getSignature(plain, plain);
// hash + 加盐
simple = simple.concat(salt);
// 加盐simple串 通过HMacSHA1 由 固定KEY 再 hash得到complex串
String complex = HMacSHA1.getSignature(simple, KEY);
// complex串 由 HMacSHA1 经过动态key 再 hash得到 复杂的multiplex 串
String multiplex = HMacSHA1.getSignature(complex, complex);
// 对盐salt进行DES3加密
String des_salt = StaticKeyHelper.encryptKey(salt);
// multiplex 尾部拼接加密的盐 得到最终的结果串
String result = multiplex.concat(des_salt); // 机密salt链接在加密密码之后
return result;
}
深度随机盐
public static String salt() {
Random random = new Random();
// 随机字符串长度
int length = random.nextInt(RANDOM_LENGTH) + 5;
// 由给定chars串 生成随机长度为length的字符串
String salt = RandomStringUtils.random(length, CHARACTORS);
return salt;
}
对称解密得到盐
public static Map<String, String> resolvePassword(String encrypt) {
Map<String, String> params = new HashMap<String, String>();
// 从字符串字段中解析出加密密码和盐,并对盐进行解密
String persistent = encrypt.substring(0, 40);
String salt = encrypt.substring(40);
salt = StaticKeyHelper.descryptKey(salt);
params.put("password", persistent);
params.put("salt", salt);
return params;
}
对称加解密方法,key跟上面的key不一样
private static final String KEY = "abcdxxxx";
public static String encryptKey(String key) {
String s = "";
try {
s = DES3.encrypt(key, KEY);
} catch (Exception e) {
throw new RuntimeException("加密错误", e);
}
return s;
}
public static String descryptKey(String data) {
String s = "";
try {
s = DES3.decrypt(data, KEY);
} catch (Exception e) {
throw new RuntimeException("解密错误", e);
}
return s;
}
有了上述的加密方法,可以安全的对用户数据如密码进行加密了,并且数据库中存到加密数据不可逆,我们也不知道用户到底存的是什么密码,这才是安全的数据。
虽然我们不知道,但我们可以对用户的输入进行匹配校验,这个过程是一个对称的加密过程,即 一部分不可逆+一部分可逆= 加密串
//对用户的输入密码进行校验
String dbpwd = "数据库中的加密密码";
String salt = resolvePassword(dbpwd ).get("salt");
String encryptedPassword = PasswordHelper.encrypt(reqpwd, salt);
if (!dbpwd.equals(encryptedPassword)) {
throw new ServiceException(UserErrorCode.USER_NOT_FOUND, "用户帐号或密码错误");
}
分享到:
相关推荐
高安全性加密系统在智能电表中的应用.doc
电信设备-基于真随机复杂算法的高安全性加密通信系统.zip
1. **高强度加密**:台电加密软件通常采用先进的加密算法,如AES(Advanced Encryption Standard)256位加密,这是一种国际认可的高安全性加密标准。通过复杂的数学运算,将原始数据转化为密文,确保即使U盘丢失,...
图像加密的安全性测试工具,可以测很多安全项,也可以测试密钥流
【标题】: "基于Oracle模型的可认证加密协议安全性分析" 【描述】: 该文主要探讨了在Oracle模型下,可认证加密协议的安全性,尤其是针对选择明文攻击(IND-CPA)的安全性分析。 【标签】: Oracle数据库、关系型...
此后,双方的通信数据使用DES密钥加密,既保证了加密效率,又确保了密钥在传输过程中的安全性。 1.1 对称加密算法——DES DES(数据加密标准)是IBM公司开发的一种广泛使用的对称加密算法。它以64位为一组对数据...
例如,可以使用AES(高级加密标准)加密,这是一种广泛应用的对称加密算法,具有高速和高安全性。用户只需安装特定的加密软件,然后选择要加密的U盘,设置一个安全的密码,软件会自动执行加密过程。一旦加密完成,...
6. 加密类型:了解所使用的加密算法,比如AES-256是一种常见的高安全性加密标准,适合保护大量敏感数据。 总的来说,"简单使用的文件加密软件、工具"为用户提供了一种方便快捷的方式来保护个人隐私和重要信息。然而...
《对一种神经网络加密方案的安全性分析》这篇文章深入探讨了神经网络加密方案的脆弱性和安全性问题,特别是针对曹进德和虞文武教授在2006年提出的基于时滞的混沌神经网络加密方法(YU-CAO方案)。该方案利用混沌理论...
RSA 加密算法介绍原理及安全性分析 RSA 加密算法是基于大数分解难题的公钥加密算法,由 Ron Rivest、Adi Shamir 和 Leonard Adleman 三人在 1978 年提出的。RSA 算法的安全性基于两个大素数的乘积难以分解的难题上...
因此,为了提高安全性,引入了三重DES(Triple-DES)算法,它通过使用两个或三个独立的密钥进行三次加密来增强DES的安全性。尽管如此,三重DES依然存在一定的安全漏洞,并且由于加密过程复杂,导致效率较低。 #### ...
Android 的安全性问题一直备受关注,Google 在 Android 系统的安全方面也是一直没有停止过更新,努力做到更加安全的手机移动操作系统。 在 Android 的安全性方面,有很多模块: 1 内核安全性 2 应用安全性 3 应用...
本项目着重介绍了如何在Java环境中生成PDF文件,并且对其进行加密以及设置安全性。下面我们将深入探讨相关知识点。 首先,我们关注的是"JAVA生成PDF文件"。Java中常用的PDF库有iText、Apache PDFBox、 Flying ...
实例RSA加密;RSA是非对称算法的加密代表。
例如,AES(Advanced Encryption Standard)是一种对称加密算法,具有高效率和强大的安全性,适用于大量数据的加密。RSA则是一种非对称加密算法,它使用一对公钥和私钥,其中公钥用于加密,私钥用于解密,这为数据...
安全性之加密PPT模板.pptx,安全性之加密PPT,适用于分析与安全有关的服务或者数据处理和数据传输安全性等各种情况,可以用在网络大会PPT中,业务培训PPT中,安防行业PPT中,该PPT展示突出了数据加密、邮件
2. **非对称加密**:采用公钥和私钥对,公钥用于加密,私钥用于解密,如RSA、ECC,安全性更高,但计算复杂度大。 #### 解密技术 解密是加密的逆过程,即将密文还原为明文。解密技术依赖于加密时使用的算法和密钥。...