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);
}
/**字符串函数php
* 使⽤ HMAC-SHA1 签名算法对data进⾏签名
* @param data 被签名的字符串
* @param key 密钥
* @return 加密后的字符串
*/
public static String getSignature(String data, String key) throws Exception {
/
/根据给定的字节数组构造⼀个密钥,第⼆参数指定⼀个密钥算法的名称
SecretKeySpec signinKey = new Bytes(), HmacSHA1);
//⽣成⼀个指定 Mac 算法的 Mac 对象
Mac mac = Instance(HmacSHA1);
//⽤给定密钥初始化 Mac 对象
mac.init(signinKey);
//完成 Mac 操作
byte[] rawHmac = mac.Bytes());
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.HexString(b[n] & 0xFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs;
}
运⾏结果:
39b46d318c7338b034d1f623a551b8ddcadb7ac0
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论