用户密码的加密(MD5算法)---by wjf(2020.5.23)

背景:在我们的项目中,用户的密码是不能直接以明文的形式直接存入数据库的,这样如果有外人拿到数据库,就可以直接看到用户的密码,安全性过低。为了避免这种风险,现在我们都是通过MD5加密之后把MD5的一个值放在数据库中,当外人拿到数据库之后也不知道用户的密码,这样子可以大大的提升安全性。

MD5算法原理
MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
总体流程如下图所示,每次的运算都由前一轮的128位结果值和当前的512bit值进行运算。

在这里插入图片描述

那么我们如何通过代码来实现这一功能呢?其实原理很简单,我们对保存到数据库的密码跟盐值搅拌在一起,搅拌完了之后我们在执行MD5算法,最后存入数据库。

具体实现代码:

package cn.edu.mju.project1.util;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class EncryptUtil {
    public static String md5(String plainText){
        String encryStr = null;
        if(plainText != null && !"".equals(plainText)) {
            try {
                byte[] ret = MessageDigest.getInstance("md5").digest(plainText.getBytes());
                String md5Code = new BigInteger(1, ret).toString(16);
                for (int i = 0; i < 32 - md5Code.length(); i++) {
                    md5Code = "0" + md5Code;
                }
                encryStr = md5Code;
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
        return encryStr;
    }
}

测试代码:

import cn.edu.mju.project1.util.EncryptUtil;
import org.junit.Test;

public class TestEncrypt {
    @Test
    public void testMd5(){
        System.out.println(EncryptUtil.md5("1234"));
    }
}

测试结果:
在这里插入图片描述
如图所示,测试成功,我们就可以应用于将数据库测试

实现代码:

package service;

import cn.edu.mju.project1.entity.User;
import cn.edu.mju.project1.service.IUserService;
import cn.edu.mju.project1.service.impl.UserService;
import org.junit.Test;

public class TestUserService {
    @Test
    public void testInset(){
        User user = new User();
        user.setLoginName("test");
        user.setLoginPwd("1234");
        user.setStatus((byte)9);
        user.setPhone("1380000000");
        user.setGender((byte)1);

        IUserService service = new UserService();
        System.out.println(service.save(user));
    }
}

测试结果:
在这里插入图片描述
如图所示,我们可以发现加入到数据库的用户密码已经被加密。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值