java加密枝術(shù)深入理解
更新時間:2012年11月30日 09:32:48 作者:
java.security包中的MessageDigest類提供了計(jì)算消息摘要的方法,本文將詳細(xì)介紹,需要了解的朋友可以參考下
★ 編程思路:
java.security包中的MessageDigest類提供了計(jì)算消息摘要的方法, 首先生成對象,執(zhí)行其update( )方法可以將原始數(shù)據(jù)傳遞給該對象,然后執(zhí)行其digest( )方法即可得到消息摘要。具體步驟如下:
(1)生成MessageDigest對象
MessageDigest m=MessageDigest.getInstance("MD5");
分析:和2.2.1小節(jié)的KeyGenerator類一樣。MessageDigest類也是一個工廠類,其構(gòu)造器是受保護(hù)的,不允許
直接使用new MessageDigist( )來創(chuàng)建對象,而必須通過其靜態(tài)方法getInstance( )生成MessageDigest對象。
其中傳入的參數(shù)指定計(jì)算消息摘要所使用的算法,常用的有"MD5","SHA"等。若對MD5算法的細(xì)節(jié)感興趣可參考
http://www.gztarena.com/rfc1321.txt。
(2)傳入需要計(jì)算的字符串
m.update(x.getBytes("UTF8" ));
分析:x為需要計(jì)算的字符串,update傳入的參數(shù)是字節(jié)類型或字節(jié)類型數(shù)組,對于字符串,需要先使用
getBytes( )方法生成字符串?dāng)?shù)組。
(3)計(jì)算消息摘要
byte s[ ]=m.digest( );
分析:執(zhí)行MessageDigest對象的digest( 廣州達(dá)內(nèi)java)方法完成計(jì)算,計(jì)算的結(jié)果通過字節(jié)類型的數(shù)組返回。
(4)處理計(jì)算結(jié)果
必要的話可以使用如下代碼將計(jì)算結(jié)果s轉(zhuǎn)換為字符串。
String result="";
for (int i=0; i
result+=Integer.toHexString((0x000000ff & s) | 0xffffff00)。substring(6);
}
★代碼與分析:
完整程序如下:
import java.security.*;
public class DigestPass{
public static void main(String args[ ]) throws Exception{
String x=args[0];
MessageDigest m=MessageDigest.getInstance("MD5");
m.update(x.getBytes("UTF8"));
byte s[ ]=m.digest( );
String result="";
for (int i=0; i
result+=Integer.toHexString((0x000000ff & s) | 0xffffff00)。substring(6);
}
System.out.println(result);
}
}
★運(yùn)行程序
輸入java DigestCalc abc來運(yùn)行程序,其中命令行參數(shù)abc是原始數(shù)據(jù),屏幕輸出計(jì)算后的消息摘要:
900150983cd24fb0d6963f7d28e17f72。
java.security包中的MessageDigest類提供了計(jì)算消息摘要的方法, 首先生成對象,執(zhí)行其update( )方法可以將原始數(shù)據(jù)傳遞給該對象,然后執(zhí)行其digest( )方法即可得到消息摘要。具體步驟如下:
(1)生成MessageDigest對象
MessageDigest m=MessageDigest.getInstance("MD5");
分析:和2.2.1小節(jié)的KeyGenerator類一樣。MessageDigest類也是一個工廠類,其構(gòu)造器是受保護(hù)的,不允許
直接使用new MessageDigist( )來創(chuàng)建對象,而必須通過其靜態(tài)方法getInstance( )生成MessageDigest對象。
其中傳入的參數(shù)指定計(jì)算消息摘要所使用的算法,常用的有"MD5","SHA"等。若對MD5算法的細(xì)節(jié)感興趣可參考
http://www.gztarena.com/rfc1321.txt。
(2)傳入需要計(jì)算的字符串
m.update(x.getBytes("UTF8" ));
分析:x為需要計(jì)算的字符串,update傳入的參數(shù)是字節(jié)類型或字節(jié)類型數(shù)組,對于字符串,需要先使用
getBytes( )方法生成字符串?dāng)?shù)組。
(3)計(jì)算消息摘要
byte s[ ]=m.digest( );
分析:執(zhí)行MessageDigest對象的digest( 廣州達(dá)內(nèi)java)方法完成計(jì)算,計(jì)算的結(jié)果通過字節(jié)類型的數(shù)組返回。
(4)處理計(jì)算結(jié)果
必要的話可以使用如下代碼將計(jì)算結(jié)果s轉(zhuǎn)換為字符串。
復(fù)制代碼 代碼如下:
String result="";
for (int i=0; i
result+=Integer.toHexString((0x000000ff & s) | 0xffffff00)。substring(6);
}
★代碼與分析:
完整程序如下:
復(fù)制代碼 代碼如下:
import java.security.*;
public class DigestPass{
public static void main(String args[ ]) throws Exception{
String x=args[0];
MessageDigest m=MessageDigest.getInstance("MD5");
m.update(x.getBytes("UTF8"));
byte s[ ]=m.digest( );
String result="";
for (int i=0; i
result+=Integer.toHexString((0x000000ff & s) | 0xffffff00)。substring(6);
}
System.out.println(result);
}
}
★運(yùn)行程序
輸入java DigestCalc abc來運(yùn)行程序,其中命令行參數(shù)abc是原始數(shù)據(jù),屏幕輸出計(jì)算后的消息摘要:
900150983cd24fb0d6963f7d28e17f72。
相關(guān)文章
SpringBoot實(shí)現(xiàn)RabbitMQ監(jiān)聽消息的四種方式
本文主要介紹了SpringBoot實(shí)現(xiàn)RabbitMQ監(jiān)聽消息的四種方式,包括@RabbitListener,MessageListener接口,MessageListenerAdapter適配器,@RabbitHandler這幾種,感興趣的可以了解一下2024-05-05
解決引用slf4j中Logger.info只打印出文字沒有數(shù)據(jù)的問題
這篇文章主要介紹了解決引用slf4j中Logger.info只打印出文字沒有數(shù)據(jù)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
java web監(jiān)聽器統(tǒng)計(jì)在線用戶及人數(shù)
本文主要介紹了java web監(jiān)聽器統(tǒng)計(jì)在線用戶及人數(shù)的方法解析。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04
如何查看Linux上正在運(yùn)行的所有Java程序列表
在linux操作時,經(jīng)常要查看運(yùn)行的項(xiàng)目的進(jìn)程和端口,下面這篇文章主要給大家介紹了關(guān)于如何查看Linux上正在運(yùn)行的所有Java程序列表的相關(guān)資料,需要的朋友可以參考下2023-10-10
Spring組件初始化擴(kuò)展點(diǎn)BeanPostProcessor的作用詳解
本文通過實(shí)戰(zhàn)案例和常見應(yīng)用場景詳細(xì)介紹了BeanPostProcessor的使用,并強(qiáng)調(diào)了其在Spring擴(kuò)展中的重要性,感興趣的朋友一起看看吧2025-03-03
Log4j關(guān)閉Spring和Hibernate日志打印方式
這篇文章主要介紹了Log4j關(guān)閉Spring和Hibernate日志打印方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12

