String result = "";
for(int i=0;i<re.length;i++){
result += Integer.toHexString((0x000000ff&re[i])|0xffffff00).substring(6);
}
System.out.println(result);
}
}
当 A 和 B 通信时,A 将数据传给 B 时,同时也将数据的消息摘要传给 B,B 收到后可以用该消息摘要验证 A 传的消息是否正确。
这时会产生问题,即若传递过程中别人修改了数据时,同时也修改了消息摘要。B 就无法确认数据是否正确。消息验证码可以解决
这一问题。
使用消息验证码的前提是 A 和 B 双方有一个共同的密钥,这样 A 可以将数据计算出来的消息摘要加密后发给 B,以防止消息摘要
“
”
被改。由于使用了共同的密钥,所以称为 验证码 。
例、下面的程序即可利用共同的密钥来计算消息摘要的验证码
package com.mac;
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
public class MyMac {
public static void main(String[] args) throws Exception{
//
这是一个消息摘要串
String str="TestString";
//
共同的密钥编码,这个可以通过其它算法计算出来
byte[] kb={11,105,-119,50,4,-105,16,38,-14,-111,21,-95,70,-15,76,-74,
67,-88,59,-71,55,-125,104,42};
//
获取共同的密钥
SecretKeySpec k = new SecretKeySpec(kb,"HMACSHA1");
//获取 Mac
对象
Mac m = Mac.getInstance("HmacMD5");
m.init(k);