Java 常见摘要算法——md5、sha1、sha256
目录
实现sha256的代码和sha1的代码相似
摘要算法简介
摘要算法,也是加密算法的一种,还有另外一种叫法:指纹。摘要算法就是对指定的数据进行一系列的计算,然后得出一个串内容,该内容就是该数据的摘要。不同的数据产生的摘要是不同的,所以,可以用它来进行一些数据加密的工作:通过对比两个数据加密后的摘要是否相同,来判断这两个数据是否相同。
还可以用来保证数据的完整性,常见的软件在发布之后,会同时发布软件的md5和sha值,这个md5和sha值就是软件的摘要。当用户将软件下载之后,然后去计算软件的摘要,如果计算所得的摘要和软件发布方提供的摘要相同,则证明下载的软件和发布的软件一模一样,否则,就是下载过程中数据(软件)被篡改了。
常见的摘要算法包括:md、sha这两类。md包括md2、md4、md5;sha包括sha1、sha224、sha256、sha384、sha512。
md5
md摘要算法包括多种算法:分别是md2、md4、md5。现在一般都是使用md5进行加密。
Java中实现md5加密,有三种方式:
使用jdk内置的方法实现实现md5加密
package cn.ganlixin.security; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import org.apache.commons.codec.binary.Hex; public class JdkMD5 {
public static void main(String[] args) throws NoSuchAlgorithmException {
String plainText = "this is plain text"; // 通过调用MessageDigest(数据摘要类)的getInstance()静态方法,传入加密算法的名称,获取数据摘要对象。
//MessageDigest MessageDigest.getInstance(algorithm);
MessageDigest messageDigest = MessageDigest.getInstance("MD5"); // 获取摘要(加密),结果是字节数组
// byte[] java.security.MessageDigest.digest(byte[] input)
byte[] ciphertext = messageDigest.digest(plainText.getBytes()); // 利用apache的commons-codec,将字节数组转换为十六进制。
System.out.println(Hex.encodeHexString(ciphertext));
}
}
使用bc方式实现md5加密
这种方式需要下载bc的jar包,bc是bouncycastle的缩写。
jar包的下载地址:http://bouncycastle.org/latest_releases.html
package cn.ganlixin.security; import java.security.NoSuchAlgorithmException; import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.util.encoders.Hex; public class BcMD5 {
public static void main(String[] args) throws NoSuchAlgorithmException { String plainText = "this is plain text"; // 直接创建一个MD5Digest对象(bouncycastle的)
MD5Digest md5Digest = new MD5Digest(); md5Digest.update(plainText.getBytes(), 0, plainText.getBytes().length); // 获取这种加密方式在加密之后,字节数组的长度
byte[] cipherBytes = new byte[md5Digest.getDigestSize()];
md5Digest.doFinal(cipherBytes, 0); // 使用bc自己的hex类将字节数组转换为十六进制
String cipherStr = Hex.toHexString(cipherBytes);
System.out.println(cipherStr);
}
}
使用Cc方式实现md5加密
Cc,是commons.codec的简写,需要下载apache-commons-codec的jar包。
cc方式实现md5加密,其实是对jdk实现md5加密进行了封装和简化操作,从下面的代码量和可读性就可以看出来,cc方式实现md5加密很方便。
package cn.ganlixin.security;
import org.apache.commons.codec.digest.DigestUtils;
public class CcMD5 {
public static void main(String[] args) {
String plainText = "this is plain text";
// cc方式是使用codec中的DigestUtils工具类
/*
对于md5加密来说,DigestUtils提供了6个静态方法
byte[] DigestUtils.md5(byte[] data)
byte[] DigestUtils.md5(InputStream is)
byte[] DigestUtils.md5(String data)
String DigestUtils.md5Hex(byte[] data)
String DigestUtils.md5Hex(InputStream is)
String DigestUtils.md5Hex(String data)
*/
// 实现md5加密只需要一行代码
String cipherText = DigestUtils.md5Hex(plainText);
System.out.println(cipherText);
}
}
sha1
sha类加密算法有多种,共两大类,一类是sha1,另一类包含多种加密算法:sha224、sha256、sha384、sha512,这些统称为sha2。
其中sha1加密后的长度是160byte,sha2加密之后的密文长度和shaXxx的数字相同,比如sha256加密之后,密文长度为256byte。
使用jdk内置方法实现sha1加密
package cn.ganlixin.security; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import org.apache.commons.codec.binary.Hex; public class JDKSHA1 { public static void main(String[] args) throws NoSuchAlgorithmException { String plainText = "this is plain Text"; // 获取指定摘要算法的messageDigest对象
MessageDigest messageDigest = MessageDigest.getInstance("SHA"); // 此处的sha代表sha1 // 调用digest方法,进行加密操作
byte[] cipherBytes = messageDigest.digest(plainText.getBytes()); String cipherStr = Hex.encodeHexString(cipherBytes); System.out.println(cipherStr); }
}
使用bc方式实现sha1加密
package cn.ganlixin.security; import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.util.encoders.Hex; public class BcSHA1 {
public static void main(String[] args) { String plainText = "this is plain Text"; Digest digest = new SHA1Digest(); digest.update(plainText.getBytes(), 0, plainText.getBytes().length); // 创建保存摘要的字节数组
byte[] cipherBytes = new byte[digest.getDigestSize()]; digest.doFinal(cipherBytes, 0); String cipherText = Hex.toHexString(cipherBytes);
System.out.println(cipherText); }
}
使用cc方式实现sha1加密
cc方式实现sha1加密,超级简单,和实现md5加密一样,一行代码即可。
package cn.ganlixin.security;
import org.apache.commons.codec.digest.DigestUtils;
public class CcSHA1 {
public static void main(String[] args) {
String cipherText = DigestUtils.sha1Hex("this is plain Text");
System.out.println(cipherText);
}
}
Java 常见摘要算法——md5、sha1、sha256的更多相关文章
- MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
MD5 SHA1 SHA256 SHA512 这4种本质都是摘要函数,不通在于长度 MD5 是 128 位,SHA1 是 160 位 ,SHA256 是 256 位,SHA512 是512 位. ...
- Hash校验工具、MD5 SHA1 SHA256命令行工具
MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/has ...
- 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3
[程序介绍]免费开源的 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3 这是一个有意思的程序,同一个程序,即是图形程序,又是命令行程序.程序作用:输入一个文件的路径,输出 ...
- Windows自带MD5 SHA1 SHA256命令行工具
感恩大佬LiuYanYGZ的文章 MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirs ...
- You shouldn't use *any* general-purpose hash function for user passwords, not BLAKE2, and not MD5, SHA-1, SHA-256, or SHA-3
hashlib - Secure hashes and message digests - Python 3.8.3 documentation https://docs.python.org/3.8 ...
- Java BASE58 以及 md5,sha256,sha1
package cn.ubibi.wsblog.utils; import java.io.UnsupportedEncodingException; import java.math.BigInte ...
- Java 文件完整性校验 MD5 sha1 sha256 sha224 sha384 sha512
由于项目中需要使用文件做备份,并且要提供备份文件的下载功能.备份文件体积较大,为确保下载后的文件与原文件一致,需要提供文件完整性校验. 网上有这么多此类文章,其中不少使用到了 org.apache.c ...
- asp中的md5/sha1/sha256算法收集
对于asp这种古董级的技术,这年头想找一些有用的资料已经不容易了,下面是一些常用的加密算法: md5 (将以下代码另存为md5.inc) <% Private Const BITS_TO_A_B ...
- Windows命令查看文件MD5,SHA1,SHA256 文件校验
certutil -hashfile yourfilename.ext MD5 certutil -hashfile yourfilename.ext SHA1 certutil -hashfile ...
随机推荐
- ProgressWheelDialogUtil【ProgressWheel Material样式进度条对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单封装网络请求时的加载对话框以及上传.下载文件的进度加载对话框. 效果图 代码分析 ProgressWheel : 自定义view ...
- 每周分享五个 PyCharm 使用技巧(一)
PyCharm 是大多数 Python 开发者的首选 IDE,每天我们都在上面敲着熟悉的代码,写出一个又一个奇妙的功能. 一个每天都在使用的工具,如果能掌握一些高效的使用技巧,肯定会给我们的开发效率带 ...
- Notepad++替换SQL Server Select窗口列名的中括号的小技巧
条件:“查找模式”那选中“扩展” 一.简单替换 查找目标(包括空格,各个SSMS版本可能不同): ]\r\n ,[ 替换为:, 二.替换为@ 查找目标(包括空格,各个SSMS版本可能不同): ]\r\ ...
- mysql-8.0 安装教程(自定义配置文件,密码方式已修改)
下载zip安装包: MySQL8.0 For Windows zip包下载地址:https://dev.mysql.com/downloads/file/?id=476233,进入页面后可以不登录.后 ...
- 数据结构——Java实现顺序栈
一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 顺序栈是指利用顺序存储结构实现 ...
- JAVA设计模式——简单工厂
工厂模式分为三种:简单工厂模式,工厂方法模式,抽象工厂模式.我看有的书上和有的文章里是分为两种,没有简单工厂. 工厂模式主要的作用是:一个对象在实例化的时候可以选择多个类,在实例化的时候根据一些业务规 ...
- Vue基础知识
Vue特性: 双向数据绑定 通过 指令 扩展了 HTML,通过 表达式 绑定数据到 HTML 解耦视图与数据 可复用组件 虚拟DOM -> 对象 M-V-VM 数据驱动视图 Vue声明周期: b ...
- 洛谷P3366 【模板】最小生成树(Boruvka算法)
题意 题目链接 Sol 自己yy着写了一下Boruvka算法. 算法思想很简单,就是每次贪心的用两个联通块之间最小的边去合并. 复杂度\(O(n \log n)\),然鹅没有Kruskal跑的快,但是 ...
- 学习axios
axios({ method: 'post', url: '/user/12345', data: { firstName: 'Fred', lastName: 'Flintstone' } }) . ...
- 【设计模式】单例模式 Singleton Pattern
通常我们在写程序的时候会碰到一个类只允许在整个系统中只存在一个实例(Instance) 的情况, 比如说我们想做一计数器,统计某些接口调用的次数,通常我们的数据库连接也是只期望有一个实例.Windo ...