一)java.security.MessageDigest 类:

此 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。

MessageDigest 对象开始被初始化。该对象通过使用 update 方法处理数据。任何时候都可以调用 reset 方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用 digest 方法之一完成哈希计算。

对于给定数量的更新数据,digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。

该实现可随意选择是否实现 Cloneable 接口。客户端应用程可以通过尝试复制和捕获 CloneNotSupportedException 来测试可复制性:

 MessageDigest md = MessageDigest.getInstance("SHA");
try {
md.update(toChapter1);
MessageDigest tc1 = md.clone();
byte[] toChapter1Digest = tc1.digest();
md.update(toChapter2);
...etc.
} catch (CloneNotSupportedException cnse) {
throw new DigestException("couldn't make digest of partial content");
}

注意,如果给定的实现是不可复制的,而事先已经知道摘要的数目,则仍然能够通过实例化几个实例计算中间摘要。

注意,由于历史原因,此类是抽象类,是从 MessageDigestSpi 扩展的。应用程序开发人员只需注意在此 MessageDigest 类中定义的方法;超类中的所有方法是供希望提供自己的信息摘要算法实现的加密服务提供者使用的。

二)实例代码:

package org.zhang.sha_256;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class StringEncrypt {
    /**
     * 对字符串加密,加密算法使用MD5,SHA-1,SHA-256,默认使用SHA-256
     *
     * @param strSrc
     *            要加密的字符串
     * @param encName
     *            加密类型
     * @return
     */
    public static String Encrypt(String strSrc, String encName) {
        MessageDigest md = null;
        String strDes = null;

byte[] bt = strSrc.getBytes();
        try {
            if (encName == null || encName.equals("")) {
                encName = "SHA-256";
            }
            md = MessageDigest.getInstance(encName);
            md.update(bt);
            strDes = bytes2Hex(md.digest()); // to HexString
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
        return strDes;
    }

public static String bytes2Hex(byte[] bts) {
        String des = "";
        String tmp = null;
        for (int i = 0; i < bts.length; i++) {
            tmp = (Integer.toHexString(bts[i] & 0xFF));
            if (tmp.length() == 1) {
                des += "0";
            }
            des += tmp;
        }
        return des;
    }
   
    public static void main(String args[]){
     String s=StringEncrypt.Encrypt("汪业培", "");
     System.out.println(s);
    }
}

Java SHA-256 算法实例相关推荐

  1. SHA 256算法是什么?哈希算法有哪些特点,主要应用在哪里?

    无论数字证书品牌.价格和类型如何,所有SSL证书的通用规范是采用SHA 256算法,您可以在证书详细信息或产品信息中列出的功能中看到.对于非技术人员来说,SHA 256 算法通常是个谜,但是锐成信息将 ...

  2. java treemap 排序原理,Java TreeMap排序算法实例

    本文实例讲述了Java TreeMap排序算法.分享给大家供大家参考,具体如下: TreeMap 和 HashMap 用法大致相同,但实际需求中,我们需要把一些数据进行排序: 以前在项目中,从数据库查 ...

  3. java实现lz77算法实例_数据压缩算法---LZ77算法 的分析与实现

    LZ77简介 Ziv和Lempel于1977年发表题为"顺序数据压缩的一个通用算法(A Universal Algorithm for Sequential Data Compression ...

  4. java hanlp分词_Hanlp分词实例:Java实现TFIDF算法

    算法介绍 最近要做领域概念的提取,TFIDF作为一个很经典的算法可以作为其中的一步处理. 关于TFIDF算法的介绍可以参考这篇博客http://www.ruanyifeng.com/blog/2013 ...

  5. 异或加密的java算法_Java使用异或运算实现简单的加密解密算法实例代码

    Java简单的加密解密算法,使用异或运算 实例1: package cn.std.util; import java.nio.charset.Charset; public class DeEnCod ...

  6. Java 实现sha_Java实现SHA-1算法实例

    本文实例讲述了java实现sha-1算法的方法.分享给大家供大家参考.具体实现方法如下: public class sha1util { private static final boolean he ...

  7. java 哈希算法_选择Java密码算法第1部分-哈希

    java 哈希算法 抽象 这是涵盖Java加密算法的三部分博客系列文章的第1部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 使用AES–256的单密钥对称加密 使用RSA–4096的公钥 ...

  8. 计算1至1000间的合数c语言,输出1000以内的素数的算法(实例代码)

    输出1000以内的素数的算法(实例代码) 代码如下所示: 复制代码 代码如下: #include "stdafx.h" #include #include bool IsSushu ...

  9. java 求交集 算法_Java计算交集,差集,并集的方法示例

    Java计算交集,差集,并集的方法示例 发布时间:2020-10-07 10:37:46 来源:脚本之家 阅读:106 作者:benbenkui 本文实例讲述了Java计算交集,差集,并集的方法.分享 ...

  10. Java面试常见算法

    在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序.二叉树查找等等. 本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了 ...

最新文章

  1. 【转】Visual Studio团队资源管理器 Git 源码管理工具简单入门
  2. mondb 常用命令学习记录
  3. gorm查询降序排列
  4. sql 非主键每年自增_或许你不知道的 10 条 SQL 技巧
  5. 实时数仓与离线数仓总结(一)
  6. mysql 写入性能瓶颈_如何通过性能调优突破MySQL数据库性能瓶颈?
  7. linux下目录与文件的权限及特殊权限
  8. 22_多易教育之《yiee数据运营系统》用户画像-消费行为性别预测篇
  9. CDN技术--分布式网站架构必备利器
  10. 钣金行业精益化生产和管理的必要性
  11. JAVA家庭记账软件
  12. 网页版第三方登录操作——微信登录
  13. 09 TypeError: Descriptors cannot not be created directly.
  14. 暗时间(普通的一种时间概念)
  15. php输出圆周率100位,JS计算圆周率到小数点后100位实现步骤详解
  16. gc overhead limit exceeded 解决办法和问题追究
  17. 堆排序之JAVA实现
  18. 实用级反主动防御rootkit设计思路[转载]
  19. 用友ERP U8 其他出入库单据后台记账SQL语句
  20. Surface RT and Surface Pro

热门文章

  1. 发现网站被劫持该怎么办?网站域名劫持如何有效预防
  2. 数据库的列类型与字段属性
  3. mac为什么又叫linux,为什么我从 Mac 换到了 Linux
  4. Vue上传图片图片,img标签显示图片
  5. 利用Word邮件合并插入图片
  6. 【Onedrive】查看和使用组共享链接
  7. c语言拆礼盒,拆礼盒、个人中心功能优化
  8. 自定义插件解决MyBatis-Plus like查询遇_ % \等字符需转译问题(含分页查询)
  9. 打造完美写作系统:Gitbook+Github Pages+Github Actions
  10. 欧框语言框架标准C2,雅思成绩与欧洲语言共同参考框架的对应关系