background image

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