前言

日常开发中,保存在数据库的密码都是密文的,是为了保证即即使数据库泄漏也不会产生巨大的影响。这里就需要加密的技术。

加密的实现

MessageDigest

MessageDigestd类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。

实现类

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Hash {
    public static String sha1(String portectData) {
        if (portectData.isEmpty()) {
            return "";
        }
        MessageDigest hash = null;
        try {
            hash = MessageDigest.getInstance("SHA1");
            byte[] bytes = hash.digest(portectData.getBytes("UTF-8"));
            String result = "";
            for (byte b : bytes) {
                String temp = Integer.toHexString(b & 0xff);
                if (temp.length() == 1) {
                    temp = "0" + temp;
                }
                result += temp;
            }
            return result;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return "";
    }
}

Main程序入口

以对123的加密为例

public class Main {

    public static void main(String[] args) {
        String code = Hash.sha1("123");
        System.out.println("测试加密:" + code.toUpperCase() + " 长度:" + code.length());
    }
}

SHA1加密结果

测试加密:40BD001563085FC35165329EA1FF5C5ECBDBBEEF 长度:40

补充

如果将Hash类中的hash = MessageDigest.getInstance("SHA1");SHA1替换为MD5,则会产生32为MD5加密值,运行结果如下:

测试加密:202CB962AC59075B964B07152D234B70 长度:32
Last modification:July 17th, 2019 at 10:34 am
如果我的文章对你有用,请随意赞赏,不要白嫖哦~