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 ...
随机推荐
- LogcatHelperDemo【应用log信息保存成本地文件】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单记录下LogcatHelper的使用,并对原有代码进行了修改[因为保存到应用内的目录中不需要申请权限,所以去掉保存到SD的功能- ...
- springboot~Compiler时开启插件的注解功能
对于IJ这个IDE工具来说,我们会安装一些插件来帮助我们更好的进行开发,像lombok就是一款不错的插件,使用注解的方式在项目编译时帮助我们生成代码,像getter,setter,tostring等等 ...
- c# 获取当前时间的微秒
获取毫秒大家都经常用到. 大家应该都知道怎么用. 但是,毫秒下面还有微秒. 其实这个方法也已经在c#中. 只不过很少有人用到,所以查找资料也很少有人说. 下面代码就是获取微秒的方式: DateTime ...
- 安装Phalcon报错:gcc: Internal error: Killed (program cc1)
起因 安装Phalcon可以参考github上面的README.md 下面是我在阿里云ECS服务器上面执行命令的过程: # 安装依赖 sudo yum install php-devel pcre-d ...
- SmartCode 正式开源,不只是代码生成器!
SmartCode(https://github.com/Ahoo-Wang/SmartCode) SmartCode = IDataSource -> IBuildTask -> IOu ...
- 前端神器-神级代码编辑软件Sublime Text下载、使用教程、插件推荐说明、全套快捷键
Sublime Text 是一个代码编辑器,也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能 ...
- Spring学习(二):Spring支持的5种Bean Scope
序言 Scope是定义Spring如何创建bean的实例的.Spring容器最初提供了两种bean的scope类型:singleton和prototype,但发布2.0以后,又引入了另外三种scope ...
- [转]Blue Prism Architecture
本文转自:https://mindmajix.com/blue-prism-architecture Introduction Automation technology is widely bloo ...
- Java笔记(day7-day8)
this关键字: (1)this(当局部变量和成员变量重名时,可以用关键字this区分) this代表对象,当前对象 this就是所在函数所属对象的引用 简单来说,哪个对象 ...
- 如何将workerman部署到windows服务器上面
一直以来对php的即时通讯都很好奇,其实是不知道应该怎么来实现,后来了解到了swoole和workerman这两个神器,他们都可以实现即时通信的功能,其中swoole是C语言编写的php扩展,其配置起 ...