Java EncryptionUtils 工具类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java EncryptionUtils 工具类相关的知识,希望对你有一定的参考价值。

原文地址:http://www.work100.net/tools/code-java/encryption-utils.html
更多教程:光束云 - 免费课程

EncryptionUtils

Java 中加密解密操作工具类。

主要功能特性:

  • 对文本进行不可逆加密

  • 支持多种加密方式:MD5、SHA256

  • 密码加密自动加入Salt

源码如下:

import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.DigestUtils;

/**
 * <p>Title: EncryptionUtils</p>
 * <p>Description: </p>
 * <p>Url: http://www.work100.net/tools/code-java/encryption-utils.html</p>
 *
 * @author liuxiaojun
 * @date 2019-08-09 10:08
 * ------------------- History -------------------
 * <date>      <author>       <desc>
 * 2019-08-09   liuxiaojun     初始创建
 * -----------------------------------------------
 */
public class EncryptionUtils {

    private static final int SALT_LENGTH = 6;
    private static final String SEPARATOR = "#";

    public enum EncryptionType {
        MD5("md5"),
        SHA256("sha256");

        private String type;

        EncryptionType(String type) {
            this.type = type;
        }

        public String getType() {
            return this.type;
        }

        public static EncryptionType getEncryptionType(String type) {
            if (StringUtils.isEmpty(type)) {
                return MD5;
            }
            for (EncryptionType encryptionType : EncryptionType.values()) {
                if (encryptionType.type.equalsIgnoreCase(type)) {
                    return encryptionType;
                }
            }
            return MD5;
        }
    }

    /**
     * 加密文本
     *
     * @param encryptionType 加密方式
     * @param sourceText     原文(区分大小写)
     * @return
     */
    public static String encryptText(EncryptionType encryptionType, String sourceText) {
        String encryptedText = "";
        switch (encryptionType) {
            case MD5:
                encryptedText = DigestUtils.md5DigestAsHex(sourceText.getBytes());
                break;
            case SHA256:
                break;
            default:
                encryptedText = DigestUtils.md5DigestAsHex(sourceText.getBytes());
                break;
        }
        return encryptedText;
    }

    /**
     * 加密密码
     *
     * @param encryptionType 加密方式
     * @param sourcePassword 明文密码
     * @return
     */
    public static String encryptPassword(EncryptionType encryptionType, String sourcePassword) {
        String salt = RandomStringUtils.randomAlphanumeric(SALT_LENGTH);
        sourcePassword = String.format("%s%s", sourcePassword, salt);
        String encryptedPassword = encryptText(encryptionType, sourcePassword);
        return String.format("%s%s%s%s%s", encryptionType.getType(), SEPARATOR, salt, SEPARATOR, encryptedPassword);
    }

    /**
     * 验证加密文本
     *
     * @param encryptionType 加密类型
     * @param sourceText     原文
     * @param encryptedText  密文
     * @return
     */
    public static boolean validateEncryptText(EncryptionType encryptionType, String sourceText, String encryptedText) {
        return encryptText(encryptionType, sourceText).equals(encryptedText);
    }

    /**
     * 验证密码
     *
     * @param sourcePassword    明文密码
     * @param encryptedPassword 加密后组合串
     * @return
     */
    public static boolean validateEncryptPassword(String sourcePassword, String encryptedPassword) {
        try {
            String[] split = encryptedPassword.split(SEPARATOR);
            EncryptionType encryptionType = EncryptionType.getEncryptionType(split[0]);
            String salt = split[1];
            encryptedPassword = split[2];
            sourcePassword = String.format("%s%s", sourcePassword, salt);
            return encryptText(encryptionType, sourcePassword).equals(encryptedPassword);
        } catch (Exception ex) {
            return false;
        }
    }
}

以上是关于Java EncryptionUtils 工具类的主要内容,如果未能解决你的问题,请参考以下文章

java抽象类和抽象方法

Java-011-Java流(Stream)文件(File)和IO

MyBatis延迟加载和缓存

MyBatis延迟加载和缓存

SpringBoot中在除Controller层 使用Validation的方式

Web应用程序项目中Angular 13中的授权问题