密码学中的Salt

盐值

盐值(Salt) 是一种加密技术中常用的随机数据,主要用于增强密码存储的安全性 。

背景

当数据库的信息泄露后,我们就可以轻松获取到密码、身份证号、手机号等敏感信息,虽然这些信息在数据库中是以密文的形式存在,但由于相同数据经过相同加密算法后得到的密文一般是一致的。这就使得攻击者极大程度降低了破解密码的难度,因此我们需要对用户输入的敏感信息进行包装(加盐),来增加密码被破解的难度,从而保护用户信息。

摘要算法

摘要算法(又称哈希函数)是一种单向加密函数,用于将任意长度的输入数据(如消息或文件)转换为固定长度的输出值(称为摘要或哈希值)。 摘要算法时不可逆的(无法解密),通常用来检验数据的完整性。

基于上述,我们可以利用MD5来实现对(32位盐值+明文)的加密形成32位密文,这里我们规定存储在数据库中的数据是(32位盐值+32位密文)即盐值+MD5(盐值+明文),从而便于我们实现数据的验证。

java 复制代码
import org.springframework.util.DigestUtils;

import java.util.UUID;

public class SecurityUtils {


    private static final int LENGTH = 32;
    /**
     * encrypt
     * 对密码加密
     * @param password
     * @return salt + md5(salt + 明文)
     */
    public static String encrypt(String password) {
        //随机生成32位盐值
        String salt = UUID.randomUUID().toString().replace("-","");
        //md5(salt + password)
        String encryptedPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        return salt + encryptedPassword;
    }

    /**
     * verify
     * 校验密码
     * @param  password , encryptedPassword
     * @return true/false
     */
    public static Boolean verify(String password,String encryptedPassword) {
        //校验密码长度是否合法
        if(password == null || encryptedPassword == null || encryptedPassword.length() != LENGTH * 2 ) {
            return false;
        }
        //获取盐值
        String salt = encryptedPassword.substring(0,LENGTH);
        //md5(salt + 待确认密码) -> finalPassword
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        return encryptedPassword.equals(salt + finalPassword);
    }

}
相关推荐
洁洁!3 天前
SM2签名验证深度解析
密码学·国密·sm2
幻智星科技4 天前
Karatsuba与CSD优化FPGA大数乘法
c++·fpga开发·密码学
deepseek2313 天前
AI 模型隐藏任意能力拆解:把加密神经网络塞进宿主权重,能力评估为什么在密码学上抓不到
人工智能·深度学习·神经网络·密码学·模型安全
曼岛_16 天前
[图解密码学]第1章 密码学是什么
网络·密码学·图解密码学
HackTwoHub17 天前
DeepSeek Harness 红队破甲插件|适配 SRC 挖掘场景,区分平台拦截与模型原生输出,用于大模型安全边界合规测评研究
安全·web安全·网络安全·系统安全·密码学·网络攻击模型·安全架构
梦帮科技17 天前
【3.0】上线与运维:节点监控、水龙头、区块浏览器与安全清单
运维·安全·web安全·金融·区块链·密码学·安全架构
梦帮科技18 天前
【3.0修订版】跨链中继与事件编排:Relayer 监听、多签验证与故障自愈
web安全·金融·区块链·密码学·智能合约·安全架构·信任链
黄金龙PLUS18 天前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
梦帮科技18 天前
【3.0修订版】音乐权利 NFT:MusicRightsNFT 的确权思想与授权关联
网络协议·算法·web3·区块链·密码学·智能合约·零知识证明
HackTwoHub20 天前
Clown SRC skill第二代2.x最新版企业安全研究 Skill|证据优先的 SRC 与白盒审计工作流正式更新
网络·安全·web安全·网络安全·系统安全·密码学·安全架构