PHP加密扩展库—Mhash扩展库

什么是Mhash扩展库:Mhash是基于离散数学原理的不可逆向的php加密方式扩展库,其在默认情况下不开启。mhash的可以用于创建校验数值,消息摘要,消息认证码,以及无需原文的关键信息保存(如密码)等。

1.Mhash扩展库安装

关于Mhash库的安装跟Mcrypt扩展库安装是类似的,在这里就不做多介绍了,大家可以参考上一篇文章《PHP加密扩展库—Mcrypt扩展库》!深圳dd马达

2.Mhash扩展库常量

Mhash库支持 MD5,SHA,CRC32等多种散列算法,可以使用mhash_count()和mhash_get_hash_name()函数输出支持的算法名称。下面一起看下示例代码:


1

2

3

4

5

6

7

8

<?php

header("Content-Type:text/html; charset=utf-8");

$num = mhash_count();  //函数返回最大的hash id

echo "mhash库支持的算法有:<br>";

for($i=0;$i<=$num;$i++){

    echo $i."=>".mhash_get_hash_name($i)."<br>"."";       //输出每一个hash id 的名称

}

?>

输出结果为:

注意:如果在实际应用中使用上面的常量,需要在算法名称前面加上 MHASH_作为前缀,比如 CRC32 表示为 MHASH_CRC32。

3.Mhash应用

相对比 Mcrypt 扩展库的 30 多个函数,Mhash库中只有 5 个函数,除了上面使用到的两个函数外,下面来介绍其他的 3 个函数。

(1)mhash_get_block_size()函数

函数语法格式如下:


1

int mhash_get_block_size ( int $hash )

该函数用来获取参数 hash 的区块大小,比如:mhash_get_biock_size(MHASH_CRC32)。

(2)mhash()函数

函数语法格式如下:


1

string mhash(int hash,string data[,string key])

该函数返回一个哈希值。参数 hash 为要使用的算法,参数data 是要加密的数据,参数key是加密使用的密钥。

(3) mhash_keygen_s2k()函数

函数语法格式如下:


1

string mhash_keygen_s2k ( int $hash , string $password , string $salt, int $bytes )

该函数将根据参数password 和 salt 返回一个单位为字节的 key值,参数 hash 为要使用的算法。其中 salt 为一个固定 8 字节的值,如果用户给出的数值小与 8 字节,将用 0 补齐。

下面实例中使用了 mhash_keygen_s2k()函数生成一个校验码,并使用 bin2hex()函数将二进制结果转换为十六进制。具体代码如下:


1

2

3

4

5

6

7

8

9

10

11

<?php

header("Content-Type:text/html; charset=utf-8");

$filename = "08.txt";                          // 文件路径

$str = file_get_contents($filename);            //读取文件内容到变量$str中

$hash = 2 ;                                     //设置hash值

$password = "111";                             //设置变量$password

$salt = "1234";                                //设置变量$salt

$key = mhash_keygen_s2k(1,$password,$salt,10);  //生成key 值

$str_mhash =bin2hex(mhash($hash,$str,$key));    //使用$key 值、$hash值对字符串$str 加密

echo "文件 08.txt 的校验码是:".$str_mhash//输出校验码

?>

原文地址:https://www.cnblogs.com/furuihua/p/12108654.html

时间: 2024-10-29 10:42:51

PHP加密扩展库—Mhash扩展库的相关文章

PHP加密扩展库—Mcrypt扩展库

在本文开始正文开始之前,我们先来了解一下什么是PHP加密扩展库:PHP中不但几种加密函数(md5,crypt,sha1),在此之外,PHP中还有一些功能比较全面的加密扩展库!就好比php本来不支持操作某种功能 ,但在新版本想对它提供支持,就以扩展的方式来提供,这样,我们在配置php时,如果我们不用此功能,我们就可以让php不加载他.从而节省服务器资源.提供其性能.直线电机选型 在以前的三篇文章<PHP加密函数—crypt()函数加密>.<PHP加密函数—md5()函数加密>以及&l

PHP基础库及扩展库安装

一.安装PHP所需的lib库(基础库): 1.yum install zlib-devel libxml2-devel libjpey-devel libjpeg-turbo-devel libiconv-devel -y 2.yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel libxslt-devel -y 3.安装yum源无法安装的libiconv库 mkdir

C动态库的扩展

案例背景:一般的企业信息系统都有成熟的框架,可以由C语言编写,也可以由C++编写.软件的框架一般不会发生变化,能自由地集成第三方的产品: 案例需要:在socket通信中,完成数据加密功能.有n个第三方厂商的加密产品供你选择,如何实现动态库和第三方产品的解耦和? 要求能够:1.能够支持多个第三方产品的入围:2.企业的信息系统框架不能轻易发生改变. 提醒:C++通过面向抽象类编程已经很好地解决了(C++中的多态,C++编译器通过提前布局vptr指针,虚函数表,完成动态的迟邦定).在C中有应当如何解决

PHP扩展调用C++静态库

概述 php通过扩展方式,调用c++源码,这样做的理由有很多,当你搜到这篇文章时,相信你已经有自己的考虑了. 写这篇博客的理由有二: 整理下php扩展调用c++代码的过程.嗯,对,网上有很多类似的文章,不过对于php扩展c++的方式,很多文章在关键的地方并没有说明,或者说,大部分都是扩展调用c代码的. 已经两年有余没写博客了,在这2017刚开始的时候,开个博客,开始新的旅程,也是不错的,哈哈. 大概目录 c++编译静态库 php 扩展编辑 结语 注:下面步骤的操作环境--系统macOS10.12

【C/C++学院】0801-重定向以及文件扫描/二进制加密解密/简单加密/按照密码加密/动态库与静态库

重定向以及文件扫描 #define _CRT_SECURE_NO_WARNINGS//关闭安全检查 #include<stdio.h> #include<stdlib.h> void main1() { char str[100] = { 0 }; scanf("%s", str); printf("str=%s\n", str); system(str); } void main2() { char str[100] = { 0 }; fs

Linux下Gcc生成和使用静态库和动态库详解

参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主要是编译器.汇编器和连接器的不同),因此二者库的二进制是不兼容的. 本文仅限于介绍linux下的库. 1.2库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同

【转】Linux下gcc生成和使用静态库和动态库详解

一.基本概念 1.1 什么是库 在Windows平台和Linux平台下都大量存在着库. 本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主要是编译器.汇编器和连接器的不同),因此二者的库的二进制是不兼容的. 本文仅限于介绍linux下的库. 1.2 库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大. 共享库的代码是在可

C++静态库与动态库(比较透彻)

这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书<程序员的自我修养——链接.装载与库>. 什么是库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.库有两种:静态库(.a..lib)和动态库(.so..

(转)HelloWorld CMake CMake中构建静态库与动态库及其使用

继续完善Hello World,建立它的共享库, 包括静态库和动态库. 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello World字符串. 2,安装头文件与共享库. 3, 编写一个程序使用创建的共享库(静态库和动态库). cd /home/ccj/CMakeDemo mkdir t3   cd /backup/cmake/t3 mkdir lib   在t3目录下建立CMakeLists.txt,内容如下: PRO