JAVA中使用MD5加密工具类实现对数据的加密处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中使用MD5加密工具类实现对数据的加密处理相关的知识,希望对你有一定的参考价值。

1.MD5工具类 

package com.ssm.util;

import java.security.MessageDigest;

public class MD5Util {
    //将字节数组转成十六进制字符串
    private static String byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++)
            resultSb.append(byteToHexString(b[i]));

        return resultSb.toString();
    }
    //对单个字节转换成整数进行取商取余数计算
    private static String byteToHexString(byte b) {
        int n = b;
        if (n < 0)
            n += 256;
        int d1 = n / 16;
        int d2 = n % 16;
        //根据下标d1,d2去数组hexDigits的数据
        return hexDigits[d1] + hexDigits[d2];
    }

    public static String MD5Encode(String origin, String charsetname) {
        String resultString = null;
        try {
            resultString = new String(origin);
         // 获得MD5摘要算法的 MessageDigest 对象
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (charsetname == null || "".equals(charsetname))
                //将加密之后的字节数据转换成16进制的字符串
                resultString = byteArrayToHexString(md.digest(resultString
                        .getBytes()));
            else
                resultString = byteArrayToHexString(md.digest(resultString
                        .getBytes(charsetname)));
        } catch (Exception exception) {
        }
        return resultString;
    }

    private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
}

2.在登录注册中使用MD5加密算法

  demo目录结构 

技术分享

  数据库用户表

CREATE TABLE `user` (
  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT 编号,
  `userName` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 用户名,
  `password` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 密码,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

  pojo对象User.java

package com.ssm.pojo;

public class User {
    private Integer id;
    private String userName;
    private String password;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    
    

}

2.1DAO层

  DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此, 

    • DAO层的设计首先是设计DAO的接口,
    • 然后在Spring的配置文件中定义此接口的实现类,
    • 然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,
    • DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。

UserDaO.java

package com.ssm.dao;

import com.ssm.pojo.User;

public interface UserDao {
    //用户注册
    public int register(User user) ;
    //登陆
    public User login(User user);

}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ssm.dao.UserDao">
    <resultMap type="com.ssm.pojo.User" id="UserResult">
        <result property="id" column="id" />
        <result property="userName" column="userName" />
        <result property="password" column="password" />

    </resultMap>

    <select id="login" parameterType="com.ssm.pojo.User" resultMap="UserResult">
        select * from
        user where userName=#{userName} and password=#{password} limit 1
    </select>

    <insert id="register" parameterType="com.ssm.pojo.User">
        insert into user(userName,password)
        values(#{userName},#{password})
    </insert>
</mapper> 

2.2业务层:Service层

Service层:Service层主要负责业务模块的逻辑应用设计。 

    • 首先设计接口,再设计其实现的类
    • 接着再在Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。
    • Service层的业务实现,具体要调用到已定义的DAO层的接口,
    • 封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。

UserService.java

package com.ssm.service.impl;

import com.ssm.pojo.User;

public interface UserService {
    public User login(User user); 
     public int register(User user);

}

UserServiceImpl.java

package com.ssm.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.ssm.dao.UserDao;
import com.ssm.pojo.User;
@Service("userService")
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;

    public User login(User user) {
        // TODO Auto-generated method stub
        return userDao.login(user);
    }

    public int register(User user) {
        // TODO Auto-generated method stub
        return userDao.register(user);
    }
    

}

2.3控制层:Controller层

Controller层:Controller层负责具体的业务模块流程的控制, 

    • 在此层里面要调用Service层的接口来控制业务流程,
    • 控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。

RegisterController.java

  

以上是关于JAVA中使用MD5加密工具类实现对数据的加密处理的主要内容,如果未能解决你的问题,请参考以下文章

可变MD5加密(Java实现)

Java 关于密码处理的工具类[MD5编码][AES加密/解密]

求Java的MD5加密解密实现类。 要实现对用户的密码进行加密! 然后验证用户的密码!

求 Oracle MD5加密,及java程序端的处理步骤

Android对敏感数据进行MD5加密(基础回顾)

Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理