Java中的mac计算

          报文鉴别在身份认证中占重要位置,是认证系统的一个重要环节,在金融和商业系统中广泛应用。

          报文鉴别常用报文鉴别码(Message Authentication Code,即MAC)作为鉴别的基础,

          其基本原理是:用一个密钥((private Key))生成一个小数据块附加在要传输的报文后面。这种技术是假定通讯双方共享一个密钥K,当通讯的一方要给另一方传输数据M时,通过特定的算法计算出该报文M的MAC=F(K,M),这里的F就是指鉴别运算函数,然后报文数据M和MAC一起传送给另一方。当另一方收到数据时,先用同样的算法F计算MAC,和传输过来的MAC进行比较,如果相同,则认为数据是正确的。 鉴别函数常被认为是加密算法的一种,但是区别在于它不用于逆运算,有一定的安全性。 通常对于不同的应用系统采用各自特定的鉴别函数,这样在一定程度上保证了数据的安全性。

       从j2sdk1.4以后,java提供了类javax.crypto.Mac类报文鉴别

         

macCode 就是生成的Mac,用同样的密钥能产生同样的mac。

通讯双方只要保证用同样的密钥就能保证得到同样的Mac,达到报文验证的目的。

看来看去,这和网络上常用的checksum原理是一样的。

如果您想在Java程序计算MAC值,您可以使用javax.crypto.Mac类来实现。这是一个示例代码,可以帮助您开始: ```java import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; public class MacCalculator { public static void main(String[] args) { try { // 选择一个MAC算法,如HmacSHA256 Mac mac = Mac.getInstance("HmacSHA256"); // 提供一个密钥,例如:byte[] key = "secret".getBytes(); byte[] key = args[0].getBytes(); SecretKeySpec secretKey = new SecretKeySpec(key, "HmacSHA256"); // 初始化MAC对象 mac.init(secretKey); // 计算MAC值 String message = "Hello, world!"; byte[] macValue = mac.doFinal(message.getBytes()); // 输出MAC值(可选) System.out.println("MAC值为:" + bytesToHex(macValue)); } catch (NoSuchAlgorithmException | InvalidKeyException e) { e.printStackTrace(); } } // 将byte数组转换为十六进制字符串 private static String bytesToHex(byte[] bytes) { StringBuilder result = new StringBuilder(); for (byte b : bytes) { result.append(String.format("%02X", b)); } return result.toString(); } } ``` 在上面的代码,我们首先选择一个MAC算法(例如HmacSHA256),提供一个密钥和一个消息。然后,我们初始化MAC对象并调用doFinal方法来计算MAC值。最后,我们将计算出的MAC值转换为十六进制字符串并输出。请注意,您需要处理NoSuchAlgorithmException和InvalidKeyException异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值