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

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

MessageDigest簡介

2019-11-11 02:07:07
字體:
來源:轉載
供稿:網友
一、概述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
国产在线精品播放| 久久777国产线看观看精品| 爱福利视频一区| 亚洲淫片在线视频| 国产美女精品视频| 欧美亚洲伦理www| 久久精品国产96久久久香蕉| 97成人精品视频在线观看| 日韩久久免费视频| 日韩视频免费大全中文字幕| 亚洲精品小视频在线观看| 中文字幕精品久久| 成人日韩在线电影| 久久偷看各类女兵18女厕嘘嘘| 亚洲区在线播放| 久久99国产精品久久久久久久久| 亚洲开心激情网| 日韩精品视频免费专区在线播放| 91精品国产高清自在线看超| 欧美主播福利视频| 亚洲女人天堂成人av在线| 亚洲国产精久久久久久| 国产日韩在线精品av| 一区二区三区日韩在线| 久久久久亚洲精品成人网小说| 日韩视频亚洲视频| 久久久久中文字幕| 在线精品国产成人综合| 日韩最新免费不卡| 精品国产91久久久久久老师| 成人精品久久av网站| 成人福利免费观看| 国产+成+人+亚洲欧洲| 国产成人短视频| 欧美性在线观看| 欧美激情精品久久久久久久变态| www.美女亚洲精品| 国产精品成人久久久久| 国产精品偷伦视频免费观看国产| 欧美精品久久久久久久久| 色婷婷综合久久久久中文字幕1| 亚洲精品www| 欧美精品一区二区免费| 日韩福利伦理影院免费| 国产午夜精品视频| 国产精品国模在线| 日韩av高清不卡| 亚洲欧美激情另类校园| 成人欧美一区二区三区在线| 有码中文亚洲精品| 91久久久久久久久久久久久| 亚洲精品美女久久久| 国产精品久久久久久久美男| 日韩亚洲在线观看| 最近更新的2019中文字幕| 亚洲欧美国内爽妇网| 欧美精品在线免费播放| 亚洲伊人第一页| 国产精品欧美亚洲777777| 日韩电影网在线| 国产精品美女久久久久av超清| 最近2019中文字幕mv免费看| 国产欧亚日韩视频| 久久天堂av综合合色| 日韩欧美亚洲成人| 色天天综合狠狠色| 国产剧情久久久久久| 国产午夜精品免费一区二区三区| 欧美一级免费视频| 国产aⅴ夜夜欢一区二区三区| 精品久久久久久国产| 久久精品国产亚洲| 亚洲性av在线| 国产精品日韩精品| 久久久久久久久久久免费| 久久青草精品视频免费观看| 久久国产精品久久精品| 亚洲精品二三区| 国产精品稀缺呦系列在线| 国产精品第七十二页| 日本精品免费一区二区三区| 中文字幕亚洲欧美日韩在线不卡| 国产精品视频xxxx| 亚洲午夜激情免费视频| 亚洲欧美日韩精品久久| 欧美日韩美女视频| 欧美电影免费观看| 日韩av在线一区| 欧美激情一区二区三区高清视频| 欧美日韩国产中字| 欧洲日韩成人av| 美乳少妇欧美精品| 992tv成人免费影院| 精品女同一区二区三区在线播放| 欧美一级黑人aaaaaaa做受| 亚洲欧美在线免费观看| 视频在线观看一区二区| 麻豆一区二区在线观看| 欧美性猛交xxxx乱大交极品| 亚洲欧美日韩精品久久| 国产一区二区三区欧美| 国产在线精品成人一区二区三区| 欧美日韩在线视频一区二区| 国产精品88a∨| 国产一区二区三区在线播放免费观看| 亚洲国产欧美一区二区丝袜黑人| 日韩电影免费在线观看中文字幕| 日韩成人xxxx| 亚洲综合大片69999| 日韩精品在线免费观看| 2019国产精品自在线拍国产不卡| 91精品国产成人| 亚洲一区中文字幕在线观看| 国产一区二区三区欧美| 日韩在线播放视频| 亚洲香蕉伊综合在人在线视看| 国产91色在线免费| 最近2019中文字幕大全第二页| 亚洲免费视频在线观看| www亚洲欧美| 91精品国产网站| 91天堂在线观看| 尤物99国产成人精品视频| 日韩免费在线视频| 91在线无精精品一区二区| 国产精品久久久久久超碰| 精品视频在线观看日韩| 亚洲国产中文字幕在线观看| 亚洲日韩欧美视频| 91av在线网站| 在线观看成人黄色| 国产欧洲精品视频| 欧美xxxx18性欧美| 国产69久久精品成人看| 欧美激情第99页| 欧美日韩国产一区二区三区| 2019中文在线观看| 91av在线视频观看| 亚洲国语精品自产拍在线观看| 久久久99久久精品女同性| 国产成人小视频在线观看| 亚洲少妇激情视频| 精品美女久久久久久免费| 国产91精品视频在线观看| xxxx欧美18另类的高清| 91精品国产色综合久久不卡98| 91超碰中文字幕久久精品| 国产精品视频成人| 欧美激情第6页| 91免费在线视频网站| 亚洲jizzjizz日本少妇| 欧美在线不卡区| 一区二区三区国产视频| 欧美放荡办公室videos4k| 欧美日韩国产色| 欧美一级视频免费在线观看| 亚洲欧美国产精品久久久久久久| 国产精品永久免费| 九九久久精品一区| 欧美丰满少妇xxxxx做受| 成人免费自拍视频| 亚洲精品日韩在线| 国产性猛交xxxx免费看久久| 国产欧美日韩亚洲精品|