加密方案

加密方案(待补充)

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);
    }
}
Hutool是一个Java工具包,其中包含了许多常用的工具方法和类库。它也提供了对MD5加解密的支持。MD5是一种常见的加密算法,可以将输入的数据转换成一个128位的哈希值。在Hutool中使用MD5加解密的方法如下: 引用中的代码演示了Hutool中对MD5的高级使用,包括加盐加盐位置和摘要次数。在代码中,首先定义了一个盐值(salt),然后通过MD5类创建了一个MD5实例,并传入盐值、加盐位置和摘要次数。然后通过调用digestHex方法对要加密的字符串进行MD5加密,并以16进制格式返回结果。 对称加密(Symmetric)是一种加密算法,它使用相同的密钥进行加密和解密。在对称加密算法中,加密密钥和解密密钥是相同的。对称算法的安全性依赖于密钥的保密性,如果密钥泄露,任何人都可以解密加密的数据。因此,保护密钥的秘密性对通信的安全性至关重要。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Hutool-crypto 加密、解密详解!](https://blog.youkuaiyun.com/dreaming317/article/details/130164879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

halulu.me

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

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

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

打赏作者

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

抵扣说明:

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

余额充值