相关文章推荐

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-256SHA-384、SHA-512SHA-512/224、SHA-512/256SHA-3包括:SHA3-224、SHA3-256SHA3-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("...
 
推荐文章