咖啡汪日志————一个实用的加盐加密组件


import cn.hutool.core.lang.Snowflake;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.util.DigestUtils;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Stream;

/**
 *  加盐加密工具类
 *
 * @author Yuezejian
 * @date 2020年 11月02日 11:26:17
 */
public class SaltMD5Util {
    public static final Snowflake snowflake= new Snowflake(12,10);
    /**
     *
     * @param encrypt 需要加盐加密的字符串
     * @param saltType 选择加盐的类型(1,用雪花算法做加盐加密 2,用UUID做加盐加密  3. 使用固定字符串进行加密)
     * @return
     */
    public Pair<String,String> add(String encrypt,EncryptCategory saltType) {
        Pair<String, String> pair;
        StringBuilder sb = new StringBuilder();
        String salt =  "";

        switch (saltType) {
            case SNOWFLAKE:
                salt = snowflake.nextIdStr();
                break;
            case UUID:
                salt = UUID.randomUUID().toString();
                break;
            case FIXED_STRING:
                salt = "#1859*2020";
                break;

        }
        sb.append(salt).append(encrypt);
        byte[] bytes = sb.toString().getBytes();
        encrypt = DigestUtils.md5DigestAsHex(bytes);
        pair = Pair.of(salt,encrypt);
        return pair;
    }

    /**
     * 默认使用uuid进行加盐加密
     * @param encrypt
     * @return
     */
    public Pair<String,String> add(String encrypt) {
        Pair<String, String> pair;
        StringBuilder sb = new StringBuilder();
        String salt = UUID.randomUUID().toString();
        sb.append(salt).append(encrypt);
        byte[] bytes = sb.toString().getBytes();
        encrypt = DigestUtils.md5DigestAsHex(bytes);
        pair = Pair.of(salt,encrypt);
        return pair;
    }

    /**
     *
     * @param salt 盐
     * @param validate 需要进行加盐校验的字符串
     * @return
     */
    public String validate(String salt,String validate) {
        StringBuilder sb = new StringBuilder();
        sb.append(salt).append(validate);
        byte[] bytes = sb.toString().getBytes();
        return DigestUtils.md5DigestAsHex(bytes);
    }

    private static volatile SaltMD5Util instance;
    private SaltMD5Util(){}
    public static SaltMD5Util getInstance() {
        if (instance == null) {
            synchronized (SaltMD5Util.class) {
                if (instance == null) {
                    instance = new SaltMD5Util();
                }
            }
        }
        return instance;
    }

    @Getter
    @AllArgsConstructor
    public enum EncryptCategory {
        SNOWFLAKE("雪花算法作盐加密", "001"),
        UUID("UUID作盐加密", "002"),
        FIXED_STRING("固定字符串作盐加密", "003")

        ;

        /**
         * 加密算法描述(分类)
         */
        private String decription;

        /**
         * 加密算法码
         */
        private String code;

        public static EncryptCategory of(String code) {
            Objects.requireNonNull(code);
            return Stream.of(values())
                    .filter( encryptCategory -> encryptCategory.code.equals(code))
                    .findAny()
                    .orElseThrow(() -> new IllegalArgumentException(code + " not exists!"));
        }

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡汪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值