加密方案

加密方案(待补充)

1、MD5加盐加密

MD5

Message Digest Algorithm MD5(消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。

应用场景

密码加密: 在企业中,登录账户表,里面的密码是加密的,为了防止数据管理员或IT部内部人员数据泄密。注册用户的时候,添加用户,将用户数据新增到数据库里面的时候就将用户的密码加密存储。加密算法有很多种,有一种不可逆的加密算法MD5。

MD5的特点

1、压缩性:任意长度字符串根据散列哈希算法得到一个16进制32位字符长度的字符串
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5.、不可逆的算法:由A字符串加密成B字符串,B是永远无法反推出A的。

缺陷:

但是,有一个严重的缺陷:MD5加密时,相同的明文获得的密文的一致的。
市场上已经出现MD5的破解,主要使用的时彩虹表进行破解

解决方案

彩虹表 有两个数据,分别是明文和密文,主要是通过列举常用明文进行破解。所以当明文足够长的时候,被破解的概率就非常低,甚至不会被破解。

MD5加盐加密

加盐加密格式:用户名 + 密码 + UUID的随机字符串

UUID的随机字符串被称为盐,所以称为加盐加密。

MD5的工具类

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

public class Md5Utils {

    /**
     * 对给定的字符使用md5进行加密,返回加密以后的字符串
     * @param origin
     * @return
     */
    public static String getMd5(String origin) {
        // 1) 使用静态方法,创建MessageDigest对象
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 2) 将字符串使用utf-8进行编码,得到字节数组
            byte[] input = origin.getBytes("utf-8");
            // 3) 使用digest(input)对字节数组进行md5的哈希计算,得到加密以后的字节数组,长度是16个字节。
            byte[] num = md.digest(input);
            // 4) 使用类BigInteger(1, 加密后的字节数组),将这个二进制数组转成无符号的大整数
            // 1 正数, -1表示负数
            String md5code = new BigInteger(1, num).toString(16);
            // 5) 将这个大整数转成16进制字符串,参数为多少进制
            for (int i = 0; i < 32 - md5code.length(); i++) {
                md5code = "0" + md5code;
            }
            return md5code;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        System.out.println(getMd5("123"));
        System.out.println(getMd5("abc"));
    }
}

转化成MD5的几种方式

方式一:

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
import org.apache.commons.codec.digest.DigestUtils;
import org.junit.Test;


public class MD5Test {

    @Test
    public void test(){
        String md5Hex = DigestUtils.md5Hex("123");
        System.out.println(md5Hex);
    }
}

方式二:

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.4.3</version>
        </dependency>
import cn.hutool.crypto.digest.DigestUtil;
import org.junit.Test;


public class MD5Test {

    @Test
    public void test(){
        String md5Hex = DigestUtil.md5Hex("123");
        System.out.println(md5Hex);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

halulu.me

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

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

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

打赏作者

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

抵扣说明:

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

余额充值