亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

MessageDigest簡介

2019-11-11 03:19:27
字體:
來源:轉載
供稿:網友
一、概述java.security.MessageDigest類用于為應用程序提供信息摘要算法的功能,如 md5 或 SHA 算法。簡單點說就是用于生成散列碼。信息摘要是安全的單向哈希函數,它接收任意大小的數據,輸出固定長度的哈希值。關于信息摘要和散列碼請參照《數字證書簡介》

MessageDigest 通過其getInstance系列靜態函數來進行實例化和初始化。MessageDigest 對象通過使用 update 方法處理數據。任何時候都可以調用 reset 方法重置摘要。一旦所有需要更新的數據都已經被更新了,應該調用 digest 方法之一完成哈希計算并返回結果。

對于給定數量的更新數據,digest 方法只能被調用一次。digest 方法被調用后,MessageDigest  對象被重新設置成其初始狀態。

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");

 }

注意1:即時給定MessageDigest的實現是不可復制的,則仍然能夠通過getInstance方法實例化幾個實例計算來同時進行摘要信息的計算。

注意2:由于歷史原因,此類是抽象的,是從 MessageDigestSpi 擴展的。應用程序開發人員只應該注意在此 MessageDigest 類中定義的方法;超類中的所有方法是供希望提供自己的信息摘要算法實現的加密服務提供者使用的。 

注意3:MessageDigest并不是單實例的。如下代碼所示:

       try

            {

                MessageDigest mdTemp1 = MessageDigest.getInstance("MD5");

                MessageDigest mdTemp2= MessageDigest.getInstance("MD5");

                MessageDigest mdTemp3= MessageDigest.getInstance("MD5");

                System.out.PRintln("mdTemp1==mdTemp2?:"+(mdTemp1==mdTemp2));

                System.out.println("mdTemp2==mdTemp3?:"+(mdTemp2==mdTemp3));

            } catch (NoSuchAlgorithmException e)

            {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

運行結果

mdTemp1==mdTemp2?:false

mdTemp2==mdTemp3?:false

構造方法摘要
protectedMessageDigest(String algorithm)           創建具有指定算法名稱的MessageDigest 實例對象。
  
方法摘要
 Objectclone()           如果實現是可復制的,則返回一個副本。
 byte[]digest()           通過執行諸如填充之類的最終操作完成哈希計算。
 byte[]digest(byte[] input)           使用指定的字節數組對摘要進行最后更新,然后完成摘要計算。
 intdigest(byte[] buf, int offset, int len)           通過執行諸如填充之類的最終操作完成哈希計算。
 StringgetAlgorithm()           返回標識算法的獨立于實現細節的字符串。
 intgetDigestLength()           返回以字節為單位的摘要長度,如果提供程序不支持此操作并且實現是不可復制的,則返回 0。
static MessageDigestgetInstance(String algorithm)           生成實現指定摘要算法的 MessageDigest 對象。
static MessageDigestgetInstance(String algorithm, Provider provider)           生成實現指定提供程序提供的指定算法的 MessageDigest 對象,如果該算法可從指定的提供程序得到的話。
static MessageDigestgetInstance(String algorithm, String provider)           生成實現指定提供程序提供的指定算法的 MessageDigest 對象,如果該算法可從指定的提供程序得到的話。
 ProvidergetProvider()           返回此信息摘要對象的提供程序。
static booleanisEqual(byte[] digesta, byte[] digestb)           比較兩個摘要的相等性。
 voidreset()           重置摘要以供再次使用。
 StringtoString()           返回此信息摘要對象的字符串表示形式。
 voidupdate(byte input)           使用指定的字節更新摘要。
 voidupdate(byte[] input)           使用指定的字節數組更新摘要。
 voidupdate(byte[] input, int offset, int len)           使用指定的字節數組,從指定的偏移量開始更新摘要。
 voidupdate(ByteBuffer input)           使用指定的 ByteBuffer 更新摘要。
二、實際實踐2.1、創建 MessageDigest 對象計算信息摘(即散列碼)要做的第一步是創建 MessageDigest對象 實例。像所有的引擎類一樣,獲取某類報文摘要算法(即散列算法,比如MD5)的  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 將返回已初始化過的MessageDigest對象。因此,它不需要進一步的初始化。2.2、向MessageDigest傳送要計算的數據計算數據的摘要的第二步是向已初始化的MessageDigest對象提供傳送要計算的數據。這將通過一次或多次調用以下某個 update(更新)方法來完成:

public void update(byte input);public void update(byte[] input);public void update(byte[] input, int offset, int len);

2.3、計算摘要通過調用 update 方法向MessageDigest對象提傳送要計算的數據后,你就可以調用以下某個 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 方法.三、例子演示3.1、★ 編程思路:java.security包中的MessageDigest類提供了計算消息摘要(即生成散列碼)的方法,首先生成對象,執行其update( )方法可以將原始數據傳遞給該對象,然后執行其digest( )方法即可得到消息摘要。具體步驟如下:(1)生成MessageDigest對象

MessageDigest m=MessageDigest.getInstance("MD5");

MessageDigest類也是一個工廠類,其構造器是受保護的,不允許直接使用new MessageDigist( )來創建對象,而必須通過其靜態方法getInstance( )生成MessageDigest對象。其中傳入的參數指定計算消息摘要所使用的算法,常用的有"MD5","SHA"等。(2)傳入需要計算的字符串

m.update(x.getBytes("UTF8" ));

分析:x為需要計算的字符串,update傳入的參數是字節類型或字節類型數組,對于字符串,需要先使用getBytes( )方法生成字符串數組。(3)計算消息摘要

byte s[ ]=m.digest( );

分析:執行MessageDigest對象的digest( )方法完成計算,計算的結果通過字節類型的數組返回。(4)處理計算結果必要的話可以使用如下代碼將計算結果(byte數組)轉換為字符串。

static String convertToHexString(byte data[]) { StringBuffer strBuffer = new StringBuffer(); for (int i = 0; i < data.length; i++) { strBuffer.append(Integer.toHexString(0xff & data[i])); } return strBuffer.toString(); }

3.2、示例一★完整程序如下:

public class MessageDigestDemo extends Thread { public void run() { String text = "abc"; byte data[] = null; MessageDigest m; try { data = text.getBytes("UTF8"); m = MessageDigest.getInstance("MD5"); m.update(data); byte resultData[] = m.digest(); System.out.println(convertToHexString(resultData)); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } static String convertToHexString(byte data[]) { StringBuffer strBuffer = new StringBuffer(); for (int i = 0; i < data.length; i++) { strBuffer.append(Integer.toHexString(0xff & data[i])); } return strBuffer.toString(); }}

★運行結果

900150983cd24fb0d6963f7d28e17f72

 3.3、示例二在這里我們將對計算生成的md5使用 sun.misc.BASE64Encoder進行簡單的加密。

    public String md5sumWithEncoder(String text) throws NoSuchAlgorithmException, UnsupportedEncodingException{        /*確定計算方法*/        MessageDigest md5=MessageDigest.getInstance("MD5");        BASE64Encoder base64en = new BASE64Encoder();        /*加密后的散列碼字符串*/        String strMd5=base64en.encode(md5.digest(text.getBytes("utf-8")));        return strMd5;    }

調用函數

String str="0123456789" System.out.println(md5sumWithEncoder(str));

 輸出eB5eJF1ptWaXm4bijspyxw==
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩免费观看视频| 亚洲欧美日韩国产精品| xxxx欧美18另类的高清| 福利视频第一区| 欧美性猛交xxxx富婆弯腰| 性色av一区二区三区| 亚洲欧美一区二区精品久久久| 国产精品久久久久久久久久尿| 亚洲欧美国产一本综合首页| 国产+人+亚洲| 亚洲国产欧美久久| 国产午夜精品一区二区三区| 国产成人免费91av在线| 亚洲精品国产福利| 97精品国产97久久久久久春色| 亚洲欧美日韩国产中文专区| 成人在线中文字幕| 亚洲国产欧美一区二区三区久久| 久久在线免费视频| 欧美精品videosex极品1| 日韩在线激情视频| 亚洲视频777| 亚洲大胆人体在线| 亚洲国产精彩中文乱码av在线播放| 亚洲欧美精品伊人久久| 2019av中文字幕| 欧美色xxxx| 国产欧美日韩丝袜精品一区| 91精品国产综合久久久久久久久| 美女999久久久精品视频| 一区二区三区美女xx视频| 亚洲一区免费网站| 久久伊人色综合| 日韩精品日韩在线观看| 日韩av成人在线观看| 欧美成人在线免费视频| 国产日韩精品电影| 国产精品吊钟奶在线| 欧美午夜精品伦理| 狠狠躁夜夜躁人人躁婷婷91| 国产精品视频免费在线观看| 日韩中文字幕在线视频播放| 91爱爱小视频k| 亚洲欧美日本伦理| 92国产精品视频| 91在线播放国产| 亚洲第一区第二区| 亚洲成人动漫在线播放| 久久免费福利视频| 久久国产精品久久国产精品| 夜夜嗨av一区二区三区四区| 欧美成人精品影院| 日韩欧美黄色动漫| 91综合免费在线| 伊人久久五月天| 97国产一区二区精品久久呦| 中文字幕在线看视频国产欧美| 91av在线视频观看| 久久av在线播放| 亚洲qvod图片区电影| 中文字幕9999| 国产福利精品在线| 97色伦亚洲国产| 日韩欧美极品在线观看| 亚洲国产91精品在线观看| 日韩精品亚洲精品| 成人国内精品久久久久一区| 久久网福利资源网站| 亚洲国产日韩欧美综合久久| 国产成人一区二区三区电影| 亚洲第一区第一页| 91国产精品91| 国产剧情日韩欧美| 国产精品尤物福利片在线观看| 日韩欧美亚洲范冰冰与中字| 欧美激情第99页| 日韩在线视频二区| 久久久亚洲国产天美传媒修理工| 国产精品一久久香蕉国产线看观看| 一级做a爰片久久毛片美女图片| 在线日韩欧美视频| 欧美亚洲一区在线| 日韩免费电影在线观看| 国产69精品久久久久9999| 日韩亚洲精品视频| 欧美日韩在线观看视频| 亚洲欧美三级在线| 国产精品爱啪在线线免费观看| 日韩欧美中文第一页| 国产视频精品久久久| 欧美激情xxxx性bbbb| 亚洲图片欧洲图片av| 精品久久久久久久中文字幕| 夜色77av精品影院| 欧美激情精品久久久久久变态| 性色av一区二区三区在线观看| 国产精品一区二区3区| 91久久夜色精品国产网站| 日韩中文字幕在线视频| 欧美xxxx做受欧美.88| 久久99热精品这里久久精品| 97色在线视频观看| 最好看的2019年中文视频| 91精品国产色综合久久不卡98口| 久久久久久久久久久亚洲| 伊人久久久久久久久久久久久| 久久99国产综合精品女同| 亚洲欧美在线免费| 亚洲精品免费网站| 伊人久久久久久久久久久久久| 国产精品免费电影| 青草成人免费视频| 69精品小视频| 国产午夜精品免费一区二区三区| 日韩av网址在线观看| 国产精品视频不卡| 久久综合88中文色鬼| 日韩欧美精品在线观看| 久久精品视频免费播放| 久久久久久久亚洲精品| 亚洲天堂av在线播放| 精品久久久久久久久久久久久久| 欧美性猛交xxxx乱大交极品| 亚洲精品美女在线| 亚洲精品视频免费| 日本欧美国产在线| 国产aⅴ夜夜欢一区二区三区| 亚洲天堂色网站| 欧美视频一区二区三区…| 国产精品视频免费观看www| 欧美一级成年大片在线观看| 国产精品极品美女粉嫩高清在线| 日韩成人av网| 久久久欧美精品| 久久视频在线观看免费| 日韩欧美第一页| 国产极品jizzhd欧美| 欧美成人亚洲成人日韩成人| 日韩av免费看| 日韩在线视频二区| 亚洲第一精品自拍| 在线观看国产精品91| 久热爱精品视频线路一| 亚洲国产精彩中文乱码av在线播放| 亚洲国模精品一区| 色偷偷av一区二区三区| 国产精品日韩在线播放| 欧美—级高清免费播放| 色青青草原桃花久久综合| 亚洲一区二区久久| 成人网址在线观看| 亚洲精品成人av| 一区二区日韩精品| 国产精品自产拍在线观| 亚洲丁香婷深爱综合| 亚洲最新av在线| 欧美丝袜美女中出在线| 亚洲**2019国产| 欧美日韩成人在线视频| 青青久久aⅴ北条麻妃| 国产精品中文字幕久久久| 国内成人精品一区| 97久久久久久| 国产精品久久久久久久久久新婚|