//转换字符编码为utf-8
function strToUtf8($str){
$encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));
if($encode == 'UTF-8'){
return $str;
}
else{
return mb_convert_encoding($str, 'UTF-8', $encode);
}
}
/**
* 基于md5的加密算法hmac
*
* md5已经不是那么安全了,多折腾几下吧
* 下面2种都可以用
* @param String $data 预加密数据
* @param String $key 密钥
* @return String
*/
function hmac($data, $key){
$data = strToUtf8($data);
$key = strToUtf8($key);
if (function_exists('hash_hmac')) {
return hash_hmac('md5', $data, $key);
}
$key = (strlen($key) > 64) ? pack('H32', 'md5') : str_pad($key, 64, chr(0));
$ipad = substr($key,0, 64) ^ str_repeat(chr(0x36), 64);
$opad = substr($key,0, 64) ^ str_repeat(chr(0x5C), 64);
return md5($opad.pack('H32', md5($ipad.$data)));
}
function hmac2($data, $key){
$key = strToUtf8($key);
$data = strToUtf8($data);
$b = 64; // byte length for md5
if (strlen($key) > $b) {
$key = pack("H32",md5($key));
}
$key = str_pad($key, $b, chr(0x00));
$ipad = str_pad('', $b, chr(0x36));
$opad = str_pad('', $b, chr(0x5c));
$k_ipad = $key ^ $ipad ;
$k_opad = $key ^ $opad;
return strtoupper(md5($k_opad . pack("H32",md5($k_ipad . $data))));
}
PHP中 hmac_md5 加密算法
最新推荐文章于 2021-03-25 01:30:34 发布