PHP实现的增强性mhash函数

今天使用php的加密函数mhash 的时候,报错: Fatal error : Call to undefined function mhash()

mhash是php的内置函数但是使用却报错..

一番研究总结两种方法:

1,导入php_mhash.dll扩展文件,除此之外还要导入 libmhash.dll (mhash 库的载入依赖这个文件) ,

在 Apache 的配置文件 Httpd.conf 中加载   LoadFile C:/php/libmhash.dll” 。

2,使用自定义的mhash增强函数。

代码如下:

function hmac_md5($key, $data)
{
    if (extension_loaded('mhash'))
    {
        return bin2hex(mhash (MHASH_MD5, $data, $key));
    }

$b = 64;
    if (strlen($key) > $b)
    {
        $key = pack('H*', 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 md5($k_opad . pack('H*', md5($k_ipad . $data)));
}

hmac_md5 函数里的参数$key和$data对应mhash原有的3,2参数。

这两个方法都可以顺利的使用上php 的mhash 加密函数

(0)

相关推荐

  • PHP实现的增强性mhash函数

    今天使用php的加密函数mhash 的时候,报错: Fatal error : Call to undefined function mhash() mhash是php的内置函数但是使用却报错.. 一番研究总结两种方法: 1,导入php_mhash.dll扩展文件,除此之外还要导入 libmhash.dll (mhash 库的载入依赖这个文件) , 在 Apache 的配置文件 Httpd.conf 中加载   LoadFile C:/php/libmhash.dll" . 2,使用自定义的mh

  • PHP 匿名函数与注意事项详细介绍

    PHP 匿名函数与注意事项 PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束 PHP5.2:JSON 支持 PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改 PHP5.5:yield, list() 用于 foreach, 细节修改 PHP5.6: 常量增强,可变函数

  • 详解PHP匿名函数与注意事项

    php5.3不但引进了匿名函数还有更多更好多新的特性了,下面我们一起来了解一下PHP匿名函数与注意事项,具体内容如下 PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束 PHP5.2:JSON 支持 PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改 PHP5.5:yie

  • php学习 函数 课件

    代码重用 include() require() 这两个函数都是用来引用文件的,区别是当处理失败时include()产生一个警告而require()是一个致密错误 include_once() require_once() 这两个函数与include()与require()是一样的 ,区别是include_once与require_once只能引用一次 自定义函数 自定义函数用function()来声明 函数的优越性:   控制程序设计的复杂性   提高软件的可靠性   提高软件的开发效率   

  • Java构造函数与普通函数用法详解

    函数也被称为方法! 函数的作用及特点: 1.用于定义功能,将功能封装. 2.可以提高代码的复用性. 函数注意事项: 1.不能进行函数套用(不可以在函数内定义函数). 2.函数只有被调用才能被执行. 3.基本数据类型(String.int.-.)修饰的函数类型,要有return返回值. 4.void修饰的函数,函数中的return语句可以省略不写. 5.函数名可以根据需求进行命名. 代码示例:(有无函数/方法的区别) 无函数/方法代码例子: public class NoFunc { public

  • C#中的一些延时函数

    C#一些延时函数 sleep延时方法 System.Threading.Thread.Sleep(1000); //毫秒 实现的是非独占性延时函数,延时过时中界面仍可响应消息: public static void Delay(int milliSecond) {     int start = Environment.TickCount;     while (Math.Abs(Environment.TickCount - start) < milliSecond)//毫秒     {  

  • C#中的延时函数sleep

    目录 C#延时函数sleep sleep C#延时函数,不止sleep函数 关于Math.Abs() 其他 用C#中的线程来实现 C#延时函数sleep sleep using System.Threading;  //导入命名空间,类Thread就在此空间中 Thread.Sleep(2000); //延时2s C#延时函数,不止sleep函数 在C#窗口程序中,如果在主线程里调用Sleep,在Sleep完成之前, 界面呈现出假死状态,不能响应任何操作! 下边实现的是非独占性延时函数,延时过时

  • react生命周期(类组件/函数组件)操作代码

    1.react代码模式分为两种 类组件和函数组件(生命周期也有所不同) 2.类组件(写法如下) import React from 'react' export default class App1 extends React.Component{ state = { username:'', password:'' } setUser = (event) => { this.setState({username:event.target.value}) } setPass = (event)

  • C++存储链接性原理详解

    目录 链接性 外部链接性 单定义规则 内部链接性 无链接性 总结 链接性 链接性是指名称在不同文件之间能否共享,而作用域是指名称在文件内部哪些范围可见. 这里的文件并非开发时创建的文件,而是将文件的 include 内容全部递归包含进来之后,形成的大文件. 这一点也是与Go等一些语言不同.在Go语言中,文件是按包(package)组织,所有依赖的包都需要直接或间接import进来.也就是从main开始递归import得到的就是我们依赖的所有文件. 但C++不同.C++源文件主要分.h 和 .cp

  • 编程人员阅读代码的一些小技巧分享

    代码阅读的必要性 阅读别人的代码作为研发人员是一件经常要做的事情.一个是学习新的编程语言的时候通过阅读别人的代码是个最佳的学习方法,另外是积累编程经验.如果你有机 会阅读一些操作系统的代码会帮助你理解一些基本的原理.更有就是在你作为一个质量确保人员或一个小领导的时候如果你要做白盒测试的时候没有阅读代码的能力 是不能完成相应的任务.最后一个就是如果你中途接手一个项目的时候或给一个项目做售后服务的时候是要有阅读代码的能力的. 收集所有可能收集的材料 阅读代码要做的第一件事情是收集所有和项目相关的资料

随机推荐