Java SHA-256 算法实例

来源:互联网 发布:苹果mac虚拟机 编辑:程序博客网 时间:2024/05/04 03:53

一)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);
    }
}
 

原创粉丝点击