SM3加密注册,登录时校验密码用法

一、SM3是什么?

解释:SM3 是一种密码哈希函数,由中国国家密码管理局于2010年发布,是中国国家标准之一。SM3 主要用于数字签名、消息认证码(MAC)以及随机数生成等场景,提供了一种安全的哈希算法。

二、使用步骤

1.先引入依赖

代码如下(示例):

<!--SM3加密-->
 <dependency>
     <groupId>org.bouncycastle</groupId>
     <artifactId>bcprov-jdk15on</artifactId>
</dependency>

2.编写工具类

建一个SM3Util

public class SM3Util {
    // 静态初始化块,用于添加BouncyCastle安全提供者
    // 这是因为BouncyCastle提供了对SM3哈希算法的支持
    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    /**
     * 对给定的数据进行SM3哈希计算
     * SM3是中国国家密码管理局发布的密码哈希算法,类似于SHA-256
     *
     * @param data 待哈希的字符串数据,不能为空
     * @return 计算得到的哈希值的十六进制字符串表示
     * @throws IllegalArgumentException 如果输入数据为空或为null
     */
    public static String hash(String data) {
        // 检查输入数据是否为空或为null,如果是,则抛出异常
        if (data == null || data.isEmpty()) {
            throw new IllegalArgumentException("Data cannot be null or empty");
        }

        // 创建SM3哈希算法的实例
        SM3Digest digest = new SM3Digest();

        // 将输入字符串转换为 UTF-8 编码的字节数组
        byte[] bytes = data.getBytes(java.nio.charset.StandardCharsets.UTF_8);

        // 更新哈希算法的状态,为其提供数据
        digest.update(bytes, 0, bytes.length);

        // 创建一个字节数组来存储最终的哈希值
        byte[] hash = new byte[digest.getDigestSize()];

        // 执行哈希计算,将结果存储在hash数组中
        digest.doFinal(hash, 0);

        // 将字节数组形式的哈希值转换为十六进制字符串并返回
        return Hex.toHexString(hash);
    }
}

3.业务层使用

注册

@Override
    public boolean registerUser(User user) {
        // 对密码进行SM3加密
        String encryptedPassword = SM3Util.hash(user.getPassword());
        user.setPassword(encryptedPassword);

        return  mapper.registerUser(user);
    }

登录时校验

@Override
    public User login(User user) {
        // 获取用户输入的密码
        String encryptedPassword = SM3Util.hash(user.getPassword());
        // 从数据库中获取用户信息
        User dbUser = mapper.getUserByUserName(user.getUsername());
        //  比较密码哈希值
        if (dbUser != null && dbUser.getPassword().equals(encryptedPassword)){
            return dbUser;
        }
        return mapper.login(user);
    }

getUserByUsername()这个方法需要在mapper定义

@Select("select * from youTableName where username = #{username}")
User getUserByUserName(String username);

总结

SM3 是一种安全高效的哈希算法,适用于多种安全应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值