目录


摘要算法简介

md5

使用jdk内置方法实现md5加密

使用bc方式实现md5加密

使用cc方式实现md5加密

sha1

使用jdk内置方法实现sha1加密

使用bc方式实现sha1加密

使用cc方式实现sha1加密

实现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的更多相关文章

  1. MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别

    MD5 SHA1 SHA256 SHA512 这4种本质都是摘要函数,不通在于长度  MD5 是 128 位,SHA1  是 160 位 ,SHA256  是 256 位,SHA512 是512 位. ...

  2. Hash校验工具、MD5 SHA1 SHA256命令行工具

    MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/has ...

  3. 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3

    [程序介绍]免费开源的 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3 这是一个有意思的程序,同一个程序,即是图形程序,又是命令行程序.程序作用:输入一个文件的路径,输出 ...

  4. Windows自带MD5 SHA1 SHA256命令行工具

    感恩大佬LiuYanYGZ的文章 MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirs ...

  5. 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 ...

  6. Java BASE58 以及 md5,sha256,sha1

    package cn.ubibi.wsblog.utils; import java.io.UnsupportedEncodingException; import java.math.BigInte ...

  7. Java 文件完整性校验 MD5 sha1 sha256 sha224 sha384 sha512

    由于项目中需要使用文件做备份,并且要提供备份文件的下载功能.备份文件体积较大,为确保下载后的文件与原文件一致,需要提供文件完整性校验. 网上有这么多此类文章,其中不少使用到了 org.apache.c ...

  8. asp中的md5/sha1/sha256算法收集

    对于asp这种古董级的技术,这年头想找一些有用的资料已经不容易了,下面是一些常用的加密算法: md5 (将以下代码另存为md5.inc) <% Private Const BITS_TO_A_B ...

  9. Windows命令查看文件MD5,SHA1,SHA256 文件校验

    certutil -hashfile yourfilename.ext MD5 certutil -hashfile yourfilename.ext SHA1 certutil -hashfile ...

随机推荐

  1. vue的基本指令

      1.创建vue对象 <script src="vue.js"></script> var vm = new Vue({     el:"#ap ...

  2. Linux知识要点大全(第四章)

    第四章 文件管理 *主要内容 文件和目录的操作: ①创建 ②删除 ③拷贝 ④重命名(剪切) ⑤查看 一:目录的操作 回顾与目录相关的命令 ls  查看目录中的内容 .pwd 打印当前目录   .cd  ...

  3. mybatis框架(7)---mybatis逆向工程

    mybatis逆向工程 ​ 逆向工程的目的就是缩减了我们的开发时间.所谓mybatis逆向工程,就是mybatis会根据我们设计好的数据表,自动生成pojo.mapper以及mapper.xml. 接 ...

  4. TabTopAutoLayout【自定义顶部选项卡区域(带下划线)(动态选项卡数据且可滑动)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义顶部选项卡布局LinearLayout类,实现带下划线且可滑动效果.[实际情况中建议使用RecyclerView] 备注:如果 ...

  5. 『集群』001 Slithice 服务器集群 概述

    Slithice 服务器集群 概述 Slithice是做什么的 Slithice 是一个 跨平台 的 分布式架构 框架: 旨在简化 分布式开发 的开发难度,节省 开发成本 和 后期维护成本: 并提供 ...

  6. jenkins maven 自动远程发布到服务器,钉钉提醒团队

    jenkins 自动远程发布到服务器 1.安装jenkins 安装过程:自行百度 英文不好的,不要装最新版的jenkins.建议安装Jenkins ver. 2.138.4,此版本可以设置中文语言,设 ...

  7. 四种途径提高RabbitMQ传输消息数据的可靠性(一)

    前言 RabbitMQ虽然有对队列及消息等的一些持久化设置,但其实光光只是这一个是不能够保障数据的可靠性的,下面我们提出这样的质疑: (1)RabbitMQ生产者是不知道自己发布的消息是否已经正确达到 ...

  8. C#的一些获取时间的例子

    从周一到周日的顺序,获取排序数值: int i = DateTime.Now.DayOfWeek - DayOfWeek.Monday; if (i == -1) i = 6; 获取某日起,星期一日期 ...

  9. MySQL 字符集和校对

    字符集是指一种从二进制编码到某类字符符号的映射,校对是一组用于某个字符集的排序规则.每一类编码字符都有其对应的字符集和校对规则 MySQL 如何使用字符集 每种字符集都可能有多种校对规则,并且都有一个 ...

  10. 05 入门 - 浅谈 ASP.NET MVC程序的工作原理

    目录索引:<ASP.NET MVC 5 高级编程>学习笔记 本篇内容 1. Global.asax文件 2. RouteConfig.cs文件 3. 视图命名和寻址的规则 前面创建了一个简 ...