zoukankan      html  css  js  c++  java
  • MessageDigest 类

    MessageDigest 类
        MessageDigest 类是一个引擎类,它是为了提供诸如 SHA1 或 MD5 等密码上安全的报文摘要功能而设计的。密码上安全的报文摘要可接受任意大小的输入(一个字节数组),并产生固定大小的输出,该输出称为一个摘要或散列。摘要具有以下属性:
            无法通过计算找到两个散列成相同值的报文。
            摘要不反映任何与输入有关的内容。
        使用报文摘要可以生成数据唯一且可靠的标识符。有时它们被称为数据的“数字指纹”。
    创建 MessageDigest 对象
            计算摘要的第一步是创建报文摘要实例。象所有的引擎类一样,获取某类报文摘要算法的 MessageDigest 对象的途径是调用 MessageDigest 类中的 getInstance 静态 factory 方法:
                public static MessageDigest getInstance(String algorithm)
            注意:算法名不区分大小写。例如,以下所有调用都是相等的:
                MessageDigest.getInstance("SHA")
                MessageDigest.getInstance("sha")
                MessageDigest.getInstance("sHa")
            调用程序可选择指定提供者名称,以保证所要求的算法是由已命名提供者实现的:
                public static MessageDigest getInstance(String algorithm, String provider)
            调用 getInstance 将返回已初始化过的报文摘要对象。因此,它不需要进一步的初始化。
    更新报文摘要对象
            计算数据的摘要的第二步是向已初始化的报文摘要对象提供数据。这将通过一次或多次调用以下某个 update(更新)方法来完成:
                public void update(byte input)
                public void update(byte[] input)
                public void update(byte[] input, int offset, int len)
    计算摘要
        通过调用 update 方法提供数据后,程序就调用以下某个 digest(摘要)方法来计算摘要:
            public byte[] digest()
            public byte[] digest(byte[] input)
            public int digest(byte[] buf, int offset, int len)
        前两个方法返回计算出的摘要。后一个方法把计算出的摘要储存在所提供的 buf 缓冲区中,起点是 offset。len 是 buf 中分配给该摘要的字节数。该方法返回实际存储在 buf 中的字节数。对接受输入字节数组变量的 digest 方法的调用等价于用指定的输入调用:public void update(byte[] input),接着调用不带参数的 digest 方法。

    示例一
    import java.security.MessageDigest;
    public class Md5Util {
        private static MessageDigest md5 = null;
        static {
            try {
                md5 = MessageDigest.getInstance("MD5");
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        /**
         * 用于获取一个String的md5值
         * @param string
         * @return
         */
        public static String getMd5(String str) {
            byte[] bs = md5.digest(str.getBytes());
            StringBuilder sb = new StringBuilder(40);
            for(byte x:bs) {
                if((x & 0xff)>>4 == 0) {
                    sb.append("0").append(Integer.toHexString(x & 0xff));
                } else {
                    sb.append(Integer.toHexString(x & 0xff));
                }
            }
            return sb.toString();
        }
    }   

  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/robertsun/p/4205669.html
Copyright © 2011-2022 走看看