当前位置: 首页 > article >正文

PHP的HMAC_SHA1和HMAC_MD5算法方法

很多做对接的小伙伴们都会遇到签名加密的问题,常用的就是hmac_sha1加密和hmac_md5加密,最开始用的是sha1加密,后来用到了md5加密,我以为直接把sha1改为md5就好了,结果试来试去跟文档提示的示例结果都对不上,最后经过查询搜索终于得到了正确的方法,现在把两种加密方法分享给大家

function do_hmac_sha1($str, $key) {
	$signature = "";
	if (function_exists('hash_hmac')) {
		$signature = base64_encode(hash_hmac("sha1", $str, $key, true));
	} else {
		$blocksize = 64;
		$hashfunc = 'sha1';
		if (strlen($key) > $blocksize) {
			$key = pack('H*', $hashfunc($key));
		}
		$key = str_pad($key, $blocksize, chr(0x00));
		$ipad = str_repeat(chr(0x36), $blocksize);
		$opad = str_repeat(chr(0x5c), $blocksize);
		$hmac = pack(
		                'H*', $hashfunc(
		                    ($key ^ $opad) . pack(
		                        'H*', $hashfunc(
		                            ($key ^ $ipad) . $str
		                        )
		                    )
		                )
		            );
		$signature = base64_encode($hmac);
	}
	return $signature;
}
function do_hmac_md5($data, $key) {
	if (function_exists('hash_hmac')) {
		return hash_hmac('md5', $data, $key);
	}
	$bytelen = 64;
	// byte length for md5
	if (strlen($key) > $bytelen) {
		$key = pack('H*', md5($key));
	}
	$key = str_pad($key, $bytelen, chr(0x00));
	$ipad = str_pad('', $bytelen, chr(0x36));
	$opad = str_pad('', $bytelen, chr(0x5c));
	$k_ipad = $key ^ $ipad;
	$k_opad = $key ^ $opad;
	return md5($k_opad . pack('H*', md5($k_ipad . $data)));
}


http://www.kler.cn/a/509197.html

相关文章:

  • 3D 视觉语言推理中的态势感知
  • Android渲染Latex公式的开源框架比较
  • 【机器学习实战入门】使用 Pandas 和 OpenCV 进行颜色检测
  • doris: Flink导入数据
  • 文件上传 分片上传
  • 使用 Docker 部署 Java 项目(通俗易懂)
  • 【老白学 Java】线程死锁是怎么回事
  • Unity2021.3.13崩溃的一种情况
  • Oracle 表空间的使用与创建
  • [Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令
  • mac 安装mongodb
  • 认识软件测试 - 软实力面试题
  • 【Java 数据导出到 Word实现方案】使用EasyPOI 工具包进行简易的word操作
  • 47.数据绑定的PropertyChanged C#例子 WPF例子
  • 基于Spring Cloud的电商系统设计与实现——用户与商品模块的研究(上)
  • 基于Springboot+Vue的小区物业管理系统
  • 渗透测试常用专业术语扫盲
  • 力扣-数组-283 移动零
  • Python获取系统运行时间
  • Linux:磁盘分区
  • 单线性激光扫描、多线性激光扫描?激光扫描三维重建算法环节
  • Qt应用之MDI(多文档设计)
  • 系统架构设计师-第2章-操作系统
  • 【书生大模型实战营】Git 基础知识-L0G3000
  • 1神经网络中的神经元模型
  • ElasticSearch DSL查询之复合查询