目录


摘要算法简介

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. LogcatHelperDemo【应用log信息保存成本地文件】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单记录下LogcatHelper的使用,并对原有代码进行了修改[因为保存到应用内的目录中不需要申请权限,所以去掉保存到SD的功能- ...

  2. springboot~Compiler时开启插件的注解功能

    对于IJ这个IDE工具来说,我们会安装一些插件来帮助我们更好的进行开发,像lombok就是一款不错的插件,使用注解的方式在项目编译时帮助我们生成代码,像getter,setter,tostring等等 ...

  3. c# 获取当前时间的微秒

    获取毫秒大家都经常用到. 大家应该都知道怎么用. 但是,毫秒下面还有微秒. 其实这个方法也已经在c#中. 只不过很少有人用到,所以查找资料也很少有人说. 下面代码就是获取微秒的方式: DateTime ...

  4. 安装Phalcon报错:gcc: Internal error: Killed (program cc1)

    起因 安装Phalcon可以参考github上面的README.md 下面是我在阿里云ECS服务器上面执行命令的过程: # 安装依赖 sudo yum install php-devel pcre-d ...

  5. SmartCode 正式开源,不只是代码生成器!

    SmartCode(https://github.com/Ahoo-Wang/SmartCode) SmartCode = IDataSource -> IBuildTask -> IOu ...

  6. 前端神器-神级代码编辑软件Sublime Text下载、使用教程、插件推荐说明、全套快捷键

    Sublime Text 是一个代码编辑器,也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能 ...

  7. Spring学习(二):Spring支持的5种Bean Scope

    序言 Scope是定义Spring如何创建bean的实例的.Spring容器最初提供了两种bean的scope类型:singleton和prototype,但发布2.0以后,又引入了另外三种scope ...

  8. [转]Blue Prism Architecture

    本文转自:https://mindmajix.com/blue-prism-architecture Introduction Automation technology is widely bloo ...

  9. Java笔记(day7-day8)

    this关键字: (1)this(当局部变量和成员变量重名时,可以用关键字this区分)    this代表对象,当前对象       this就是所在函数所属对象的引用      简单来说,哪个对象 ...

  10. 如何将workerman部署到windows服务器上面

    一直以来对php的即时通讯都很好奇,其实是不知道应该怎么来实现,后来了解到了swoole和workerman这两个神器,他们都可以实现即时通信的功能,其中swoole是C语言编写的php扩展,其配置起 ...