大家好,欢迎来到IT知识分享网。
整理下工作中常用到的加密解密算法 和 使用场景
一、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
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency>
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 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0".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加密:明文a,秘文:" + Md5Util.getMD5Code("a")); System.out.println("带salt值的MD5加密:秘文:" + Md5Util.getMD5CodeBySalt("a", 2)); } }
执行效果:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/108323.html