java-常用加解密算法-Md5+salt及具体使用

createh53个月前 (02-01)技术教程34

整理下工作中常用到的加密解密算法 和 使用场景

一、Base64和UrlBase64

二、Md5 + salt

二、对称加密

四、非对称加密

这节整理 MD5、MD5+salt基本介绍、使用场景及特点,以及java实现机制(文末附代码,需要的自取哈)

二、Md5 + salt

Md5加密 (在线加解密网址 https://www.cmd5.com/)


定义:

(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用以提供消息的完整性保护。

特点:

加密不可逆,即无法通过密文得到原文。

不变性,即相同的原文,通过MD5算法得到的密文总是相同的。

散列性,即对原文作轻微的改动,都可导致最终的密文完全改变。

使用场景:

普通密码管理:

用户明文进行加密后存储DB,登录时比对是否一致(因其已被破解,一般 密码+salt 进行MD5加密存储来提高安全性);

数字签名:

比如对文件中内容MD5加密,如果该文件被篡改,只要重新计算Md5并比对前后的md5值,防止改动内容的“抵赖”,即数字签名的作用。

一致性验证:

MD5通过其不可逆的字符串变换算法,产生唯一的MD5信息摘要。


Md5加密 + salt

salt就是一个 随机的字符串

使用方式:

1. 数据库user表中设置一个slat列,每一次注册用户时,生成一个独一无二的slat(盐)写入数据库slat列,比如手机号作为登录用户ID。

2. 使用md5+slat的方式进行密码加密,写入数据库password列。

3. 登录用户时,先根据userid(手机号)获得slat,输入密码和md5+slat加密之后得到的password和数据库password对比,相同,则登入成功。


java实现过程

引入pom


 commons-codec
 commons-codec
 1.15

java实现Md5加密,Md5+salt加密

package com.pica.cloud.account.account.server.util;


import org.apache.commons.codec.digest.DigestUtils;


import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Random;


import static com.alibaba.fastjson.support.spring.FastJsonJsonView.UTF8;




public class Md5Util {


 private static final String UTF8 = StandardCharsets.UTF_8.name();


 /**
 * 根据长度n 获取唯一salt值
 *
 * @param n
 * @return
 */
 public static String createSlat(int n) {
 if (n == 0) return "";
 char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
 StringBuilder sb = new StringBuilder();
 for (int i = 0; i < n; i++) {
 char aChar = chars[new Random().nextInt(chars.length)];
 sb.append(aChar);
 }
 return sb.toString();
 }


 /**
 * 获取MD5+salt 密文
 * @param str password明文
 * @param length salt长度
 * @return
 */
 public static String getMD5CodeBySalt(String str, int length) {
 String saltStr = str.concat(createSlat(length));
 System.out.println("add salt值后的明文:" + saltStr);
 return getMD5Code(saltStr);
 }


 /**
 * 获取MD5 密文
 * @param str password明文
 * @return
 */
 public static String getMD5Code(String str) {
 String s = "";
 try {
 // 对str进行Md5加密
 s = DigestUtils.md5Hex(str.getBytes(UTF8));
 } catch (Exception e) {
 e.printStackTrace();
 }
 return s;
 }


 public static void main(String[] args) {


 System.out.println("不带salt值的MD5加密:明文123456a,秘文:" +
 Md5Util.getMD5Code("123456a"));
 System.out.println("带salt值的MD5加密:秘文:" +
 Md5Util.getMD5CodeBySalt("123456a", 2));
 }


}

执行效果:

相关文章

Java加密体系(MD5算法)(java加密运算)

这是我多年前的手记,分享到此。Java加密体系大家都知道,JAVA是安全的,比如自动内存管理;自动数组溢出检查;字节代码的验证机制;独特的安全类加载。。。。。JAVA都是需要编译成.class格式后再...

「Java工具类」Apache的DigestUtils加密工具类和Base64加解密类

介绍语本号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+do...

常用的加密算法介绍——MD5(md5常用的数据加密算法)

我不是高手,我只是一个普通的程序员,我特别愿意大家留言讨论,批评指正,您给我指正了,我就去查资料,去做实验,我技术就能得到提高,我认为这是一个程序员的基本素养。序言:程序员在实际的开发中会或多或少地...

MD5加密算法(MD5加密算法对于密码的实现代码)

说到加密算法,这个属于安全领域经常涉及到的加密,为了安全嘛,这个还是比较重要的知识。比如在网络协议里https就是一种加密网络传输协议,一般涉及到金融领域,购物,基金,股票等系统都需要使用https进...

鸿蒙系统全面解析,诞生背景、技术细节生态圈一文看懂 | 智东西内参

华为6月2日正式发布的鸿蒙系统无疑占据了最近热点话题的C位,虽然不全是赞美的声音,但这种努力打破美国垄断,挑战谷歌、苹果在移动操作系统上垄断地位的尝试必将成为中国科技史上的里程碑事件。本期的智能内参,...

安全架构进阶二之数字摘要(数字内容安全需求主要包括哪几个方面)

什么是数字摘要?数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,它由一个个单向Hash函数对消息进行计算而产生,如果消息在传递的途中改变了,接受者通过对收到的消息采用相同的Has...