import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;
public class MACdemo
{
public static void main(String[] args) throws Exception
{
System.out.println(jdkHmacMD5("测试 test!"));
System.out.println(bcHmacMD5("测试 test!"));
}
public static String jdkHmacMD5(String srcString) throws Exception
{
KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
SecretKey secretKey = keyGenerator.generateKey();
byte[] key = secretKey.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "HmacMD5");
Mac mac = Mac.getInstance(secretKeySpec.getAlgorithm());
mac.init(secretKeySpec);
byte[] encodedByte = mac.doFinal(srcString.getBytes());
return Hex.encodeHexString(encodedByte);
}
public static String bcHmacMD5(String srcString) throws Exception
{
HMac hMac = new HMac(new MD5Digest());
hMac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.encode("jafdafafdafddf".getBytes())));
hMac.update(srcString.getBytes(), 0, srcString.getBytes().length);
byte[] encodedByte = new byte[hMac.getMacSize()];
hMac.doFinal(encodedByte, 0);
return org.bouncycastle.util.encoders.Hex.toHexString(encodedByte);
}
}