MessageDigest 類為應用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的單向哈希函數,它接收任意大小的數據,並輸出固定長度的哈希值。
MessageDigest 對象開始被初始化。該對象通過使用 update()方法處理數據。任何時候都可以調用 reset()方法重置摘要。一旦所有需要更新的數據都已經被更新了,應該調用digest() 方法之一完成哈希計算。
對於給定數量的更新數據,digest 方法只能被調用一次。在調用 digest 之后,MessageDigest 對象被重新設置成其初始狀態。
1、public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
返回實現指定摘要算法的 MessageDigest 對象。
algorithm - 所請求算法的名稱
2、public static MessageDigest getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回實現指定摘要算法的 MessageDigest 對象。
algorithm - 所請求算法的名稱
provider - 提供者的名稱。
3、public void update(byte[] input)
使用指定的 byte 數組更新摘要。
4、public byte[] digest()
通過執行諸如填充之類的最終操作完成哈希計算。在調用此方法之后,摘要被重置。
5、public static boolean isEqual(byte[] digesta,
byte[] digestb)
- 比較兩個摘要的相等性。做簡單的字節比較。
注意:Provider可以通過 Java.security.Security.getProviders() 方法獲取已注冊提供者列表。比較常用的有“SUN”
SUN提供的常用的算法名稱有:MD2
MD5
SHA-1
SHA-256
SHA-384
SHA-512
Code舉例:
import java.security.*;
public class myDigest {
public static void main(String[] args) {
myDigest my=new myDigest();
my.testDigest();
}
public void testDigest()
{
try {
String myinfo="我的測試信息";
//java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5");
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(myinfo.getBytes());
byte[] digesta=alga.digest();
System.out.println("本信息摘要是:"+byte2hex(digesta));
//通過某中方式傳給其他人你的信息(myinfo)和摘要(digesta) 對方可以判斷是否更改或傳輸正常
java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");
algb.update(myinfo.getBytes());
if (algb.isEqual(digesta,algb.digest())) {
System.out.println("信息檢查正常");
}
else
{
System.out.println("摘要不相同");
}
}
catch (java.security.NoSuchAlgorithmException ex) {
System.out.println("非法摘要算法");
}
}
public String byte2hex(byte[] b) //二行制轉字符串
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}
}
關於Java加密的更多信息:http://www.ibm.com/developerworks/cn/java/l-security/
文章摘於 http://blog.csdn.net/ma1kong/article/details/2662997
