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

  • 相关阅读:
    应用SecureCRT(发送接收文件)
    应用mysql(Linux中安装)
    应用tomcat(Linux中安装)
    应用Oracle(Linux中的安装)
    关于Linux(时间网路同步)
    VmWare问题解决(网络变更后虚拟主机无法上网)
    [Android学习笔记]Bitmap,BitmapDrawable,BitmapFactory学习笔记
    [Android学习笔记]获取view的尺寸和坐标
    [Android学习笔记]继承自ViewGroup的控件的过程学习
    [Android学习笔记]Canvas的使用
  • 原文地址:https://www.cnblogs.com/robertsun/p/4205669.html
Copyright © 2011-2022 走看看