粤嵌打卡第33天(MD5加密工具类、SHA-1加密)
程序员文章站
2022-05-12 20:33:47
...
常见的 对称加密 算法主要有 DES、3DES、AES 等,常见的 非对称算法 主要有 RSA、DSA
等,散列算法 主要有 SHA-1、MD5 等。
今天我们用MD5来写一个常用的加密算法工具类吧!!!
1、MD5加密算法
- 1、MD5简述
MD5 用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5 不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符,一个长为16的字节数组)。
public static final byte[] computeMD5(byte[] content) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
return md5.digest(content);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
- 2、MD5工具类编写
代码如下:
package com.yueqian.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* MD5加密算法 :无论明文多少位,密文都为16位的数组
* SHA加密算法 :无论明文多少位,密文都为20位的数组
* @author LinChi
*
*/
public class MD5Utils {
//定义将密文数组转换成16进制的数值
private static String[] str= {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
public static void main(String[] args) {
System.out.println(getMd5Mes("12345"));
}
/**
* 常见加密算法:MD5 SHA
* 明文 密文
* 123 343ADFEBA2354
* 加密规则:(加密算法一样加密出来的密文一样)
* 1- 相同的明文必须加密成相同的密文
* 2- 不同的明文必须加密成不同的密文
* @param msg
* @return
*/
public static String getMd5Mes(String msg) {
//定义存储密文的字符串缓冲器
StringBuffer sb = new StringBuffer();
try {
//创建加密算法工具类,并且传入加密算法类型
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
//将加密的明文赋值给机密工具类(明文必须使用字节数组来存储)
messageDigest.update(msg.getBytes());
//加密(返回密文的数组)
byte[] resultDigest = messageDigest.digest();
/**一个字节等于8个位,分为高4位与低4位
* 1byte = 8 bit
* 0000 0000
* 1 F(15)
*/
//循环遍历字节数组
for(int i = 0;i<resultDigest.length;i++) {
//得到每一个字节
byte item = resultDigest[i];
//取低4位(& 00001111,将取到低四位)
int lowVal = item & 15;
//取高4位(无符号右移4位,然后将得到的结果& 00001111,就可以将负数的最前面的符号为由1置为0)
int hiVal = item>>>4 & 15;
sb.append(str[hiVal]).append(str[lowVal]);
}
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
}
}
测试结果如下:
产生长度为16的字节数组,一个字节=8个位,分为高8位和低8位,使用&15算法进行取低8位,使用>>>亦或算法和&15算法取高8位
2、SHA1算法
- SHA1算法简介:
SHA1 是和 MD5 一样流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更强。对于长度小于 2 ^ 64 位的消息,SHA1 会产生一个 160 位的 消息摘要(产生一个长度为20的字节数组)。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性 以及 数字签名 等场景。
示例代码:
public static byte[] computeSHA1(byte[] content) {
try {
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
return sha1.digest(content);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
3、将工具类打成jar包,供项目使用
- 右键工具类 -> Export ->jar File->选择导出的位置即可
好了,今天分享的内容就这么多了,关于其他加密算法等待下期再说吧!!!