Java 实现 Php 的 hash_hmac 函数


Php

在php中hash_hmac函数就能将HMAC和一部分哈希加密算法相结合起来实现HMAC-SHA1  HMAC-SHA256 HMAC-MD5等等算法。

函数介绍如下:
string hash_hmac(string $algo, string $data, string $key, bool $raw_output = false)
algo:要使用的哈希算法名称,可以是上述提到的md5,sha1等
data:要进行哈希运算的消息,也就是需要加密的明文。
key:使用HMAC生成信息摘要是所使用的密钥。
raw_output:该参数为可选参数,默认为false,如果设为true,则返回原始二进制数据表示的信息摘要,否则返回16进制小写字符串格式表示的信息摘要(注意是16进制数,而非简单的字母加数字)。
另外:如果algo参数指定的不是受支持的算法,将返回false。

<?php
$data = "b-b7a3b7cc7a57fb0433fef3252c60a105";
$key = "d25b2cb97c0b5a82d887ebbc0580cce0";
$str  = hash_hmac("sha1", $data, $key);
echo $str."\n";
?>

运行结果:

39b46d318c7338b034d1f623a551b8ddcadb7ac0

Java

public static void main(String[] args) throws Exception {
	String key = "d25b2cb97c0b5a82d887ebbc0580cce0";
	String data = "b-b7a3b7cc7a57fb0433fef3252c60a105";
	String result = getSignature(data, key);
	System.out.println(result);
}

/**
 * 使用 HMAC-SHA1 签名算法对data进行签名
 * @param data 被签名的字符串
 * @param key  密钥
 * @return 加密后的字符串
 */
public static String getSignature(String data, String key) throws Exception {
	//根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
	SecretKeySpec signinKey = new SecretKeySpec(key.getBytes(), HmacSHA1);
	//生成一个指定 Mac 算法 的 Mac 对象
	Mac mac = Mac.getInstance(HmacSHA1);
	//用给定密钥初始化 Mac 对象
	mac.init(signinKey);
	//完成 Mac 操作
	byte[] rawHmac = mac.doFinal(data.getBytes());
	String hexBytes = byte2hex(rawHmac);
	return hexBytes;
}

private static String byte2hex(final byte[] b) {
	String hs = "";
	String stmp = "";
	for (int n = 0; n < b.length; n++) {
		// 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
		stmp = (java.lang.Integer.toHexString(b[n] & 0xFF));
		if (stmp.length() == 1) {
			hs = hs + "0" + stmp;
		} else {
			hs = hs + stmp;
		}
	}
	return hs;
}

运行结果:

39b46d318c7338b034d1f623a551b8ddcadb7ac0


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM