JAVA 已经实现了 SHA-256 和 SHA-512 两种 Hash 算法
利用 java.security.MessageDigest 调用已经集成的 Hash 算法
创建 Encrypt 对象,并调用 SHA256 或者 SHA512 并传入要加密的文本信息,分别得到 SHA-256 或 SHA-512 两种被加密的 hash 串。
若要改为 MD5 算法,修改传入参数 strType 为 "MD5" 即可得到 MD5 加密功能。
package test;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Encrypt
* 传入文本内容,返回 SHA-256 串
* @param strText
* @return
public String SHA256(final String strText)
return SHA(strText, "SHA-256");
* 传入文本内容,返回 SHA-512 串
* @param strText
* @return
public String SHA512(final String strText)
return SHA(strText, "SHA-512");
* 字符串 SHA 加密
* @param strSourceText
* @return
private String SHA(final String strText, final String strType)
// 返回值
String strResult = null;
// 是否是有效字符串
if (strText != null && strText.length() > 0)
// SHA 加密开始
// 创建加密对象 并傳入加密類型
MessageDigest messageDigest = MessageDigest.getInstance(strType);
// 传入要加密的字符串
messageDigest.update(strText.getBytes());
// 得到 byte 類型结果
byte byteBuffer[] = messageDigest.digest();
// 將 byte 轉換爲 string
StringBuffer strHexString = new StringBuffer();
// 遍歷 byte buffer
for (int i = 0; i < byteBuffer.length; i++)
String hex = Integer.toHexString(0xff & byteBuffer[i]);
if (hex.length() == 1)
strHexString.append('0');
strHexString.append(hex);
// 得到返回結果
strResult = strHexString.toString();
catch (NoSuchAlgorithmException e)
e.printStackTrace();
return strResult;
https://blog.inull.net
Q群讨论 236201801
国产密码算法
。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。
SM3是一种密码散列函数标准,相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。
在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开。
SM3 消息摘要。可以用MD5作为对比理解。
SM3算法结果为256位,其大体上与SHA256相同,其算法过程如下:
SM3对消息长度小于为2^64位进行运算,其填充方法与SHA256的相同,假设消息m 的长度为l 比特。首先将比特“1”添加到消息的末尾,再添加k 个“0”,k是满足l + 1 + k = 448mod512 的最小的非负整数。然后再添加一个64位比特串,该比特串是长度l的二进制表示。填充后的消息m′ 的比特长度为512的倍数。
2、迭代压缩
这个过程与其他HASH算法类似,先进行消息扩展,之后迭代与压缩,其详细过程可参考标准文档。其扩展与压缩计算以循环移位为主,并有异或计算。
由于技术原因使用的是C语言导出函数以供
支持字节集计算SM3摘要,文件计算SM3摘要,一共两个方法
MD5与SHA-1算法已被攻破,不应该再用于新的用途;SHA-2与SHA-3还是安全的,可以使用。SHA-2包括:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。SHA-3包括:SHA3-224、SHA3-256、SHA3-384、SHA3-512。算法分组长度(bytes)输出长度(hash value)(bytes)是否安全SM36432安全MD46416不安全MD56416不安全SHA164。
对sha256在openssl库中调用和组装生成可以执行的基于openssl库的sha256模块,可供之后的生日攻击和长度扩展攻击等使用该模块。
可以运行test.cpp对该模块的散列加密功能进行简单测试。
将源码clone到本地运行main函数即可运行。
软件环境:Visual Studio 2019
硬件环境:PC机
SHA-256:一种哈希函数
对于任意长度的消息,SHA-256都会产生一个256bit长的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示。
String password = "123";
StringBuilder sb = new StringBuilder();
MessageDigest object = Me...
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.MessageDigest;
* 计算文件sha256值
* @author ryz
* @since 2020-05-12
public class GetFileSHA256 {
public static void
在所有的加密算法中使用最多的就是哈希加密了,很多人第一次接触的加密算法如MD5、SHA1都是典型的哈希加密算法,而哈希加密除了用在密码加密上,它还有很多的用途,如提取内容摘要、生成签名、文件对比、区块链等等。这篇文章就是想详细的讲解一下哈希加密,并分享一个哈希加密的工具类。
哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M...
最近在学习一些算法加解密方面的知识,之前对SHA256算法不是特别理解,看了许多其他大佬关于SHA256算法的详解和实现过程,终于是稍微理解了一些,真的非常感谢,这里整合了这些材料,写这篇学习笔记的目的是把自己学习SHA256算法的过程记录下来,方便下次查看。当然,如果能给有需要的小伙伴提供一些思路启发自然再好不过。
1.SHA算法概述
SHA(Secure Hash Algorithm安全散列算法)是一个密码散列函数的家族,是FIPS(联邦信息处理标准 Federal Information Proces
sha256算法,网上有很多的介绍,摘抄一段如下:
SHA-256 算法输入报文的最大长度不超过2^64 bit,输入按512-bit 分组进行处理,产生的输出是一个256-bit 的报文摘要。该算法处理包括以下几步:
STEP1:附加填充比特。
对报文进行填充使报文长度与448 模512 同余(长度=448 mod 512),填充的比特数范围是1 到512,填充比特串的最高位为1,其余位为...
单向散列函数是一类满足密码学算法安全属性的特殊散列函数,可以根据消息的内容计算出散列值,又称为安全散列函数或者哈希函数,通常用于检验消息完整性。
输入数据称为消息,计算出的散列值称为消息摘要(摘要)。
单向散列函数具有如下特点:
输入长度任意;
输出长度固定;
单向性:无法根据散列值还原出消息;
单向散列函数主要用在:
消息完整性检测;
构造伪随机数生成算法;
消息认证码;
数字签名;
一次性口令;
2. 单向散列算法
单向散列算法是单向...
1、计算文件哈希值(hash) Hashpackage com.memorynotfound.file;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.security.MessageDigest;public enum Hash {MD5("MD5"),SHA1("...