加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php基于mcrypt的加密解密实例

发布时间:2020-12-13 02:06:00 所属栏目:PHP教程 来源:网络整理
导读:《:php基于mcrypt的加密解密实例》要点: 本文介绍了:php基于mcrypt的加密解密实例,希望对您有用。如果有疑问,可以联系我们。 PHP教程 本篇章节讲解php基于mcrypt实现加密解密的办法.供大家参考研究.具体实现办法如下: PHP教程 PHP中自带了相当

《:php基于mcrypt的加密解密实例》要点:
本文介绍了:php基于mcrypt的加密解密实例,希望对您有用。如果有疑问,可以联系我们。

PHP教程本篇章节讲解php基于mcrypt实现加密解密的办法.分享给大家供大家参考.具体实现办法如下:

PHP教程PHP中自带了相当多的加密的方法,这里我们来看一下mcrypt扩展的使用方式.也是在工作中需要用这个东西加密拜访用户的Cookie的值,认真的学习了这个方面的内容.

PHP教程1.简介

PHP教程Mcrypt是PHP的一个扩展,完成了常用加密算法的封装.其实该扩展是对mcrypt标准类库的封装,mcrypt完成了相当多的常用加密算法,如DES,TripleDES,Blowfish (default),3-WAY,SAFER-SK64,SAFER-SK128,TWOFISH,TEA,RC2 和 GOST加密算法,并且提供了CBC、OFB、CFB 和 ECB 四种块加密的模型.

PHP教程2.安装和使用

PHP教程要使用该扩展,必须首先安装mcrypt标准类库,可以在http://mcrypt.sourceforge.net 下载.该扩展的编译和安装方式和常规的php扩展相同,不在详细说明了.

PHP教程3.四种块加密模型

PHP教程Mcrypt支持四种块加密模型,简要说明如下:

PHP教程①. MCRYPT_MODE_ECB(electronic codebook) 适合对小数量随机数据的加密,比如加密用户的登录暗码之类的.

PHP教程②. MCRYPT_MODE_CBC (cipher block chaining) 适合加密平安等级较高的重要文件类型.

PHP教程③. MCRYPT_MODE_CFB (cipher feedback) 适合于需要对数据流的每一个字节进行加密的场合.

PHP教程④. MCRYPT_MODE_OFB (output feedback,in 8bit) 和CFB模式兼容,但比CFB模式更平安.CFB模式会引起加密的错误扩散,如果一个byte出错,则其后续的所有byte都会出错.OFB模式则不会有此问题.但该模式的平安度不是很高,不建议使用.

PHP教程⑤. MCRYPT_MODE_NOFB (output feedback,in nbit) 和OFB兼容,由于采用了块操作算法,平安度更高.

PHP教程⑥. MCRYPT_MODE_STREAM 是为了WAKE或者RC4等流加密算法提供的额外模型.

PHP教程NOFB和STREAM仅当mycrypt的版本号大于等于libmcrypt-2.4.x才有效.(现在基本上都是大于这个版本了,libmcrypt的最新主版本已经到4了)

PHP教程4.查看支持的算法和模型

PHP教程①. mcrypt_list_modes()列出当前环境支持的模型

PHP教程②. mcrypt_list_algorithms()列出当前环境支持的算法

PHP教程如命令行执行:

代码如下:
php -r "var_dump(mcrypt_list_modes()); var_dump(mcrypt_list_algorithms());"

即可列出所有的结果.

PHP教程5.如何使用

PHP教程示例1:

代码如下:
<?php
$key = "this is a secret key";
$input = "Let us meet at 9 o'clock at the secret place.";
$encrypted_data = mcrypt_ecb (MCRYPT_3DES,$key,$input,MCRYPT_ENCRYPT);
?>

PHP教程最简单的方式如示例1中所示,该办法表明对$input使用3DES的算法进行加密,加密密钥是$key.不过这中直接调用的办法已经不被官方推荐使用,也建议大家在开发中不要使用此种方式,不一定哪天该办法就不能用了.在php5下使用此种方式调用时,能看到一条warning信息,提示“PHP Warning: attempt to use an empty IV,which is NOT recommend”.

PHP教程官方推荐的使用方式如示例2所示

PHP教程示例2:

代码如下:
<?php
??? $key = "this is a secret key";
??? $input = "Let us meet at 9 o'clock at the secret place.";
??? // 打开mcrypt,或者mcrypt类型的资源对象,该对象使用ecb模式,使用3des作为加密算法.
??? $td = mcrypt_module_open('tripledes','','ecb','');
??? // 创建iv(初始化向量)
??? $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td),MCRYPT_RAND);
??? // 根据密钥和iv初始化$td,完成内存分配等初始化工作
??? mcrypt_generic_init($td,$iv);
??? // 进行加密
??? $encrypted_data = mcrypt_generic($td,$input);
??? // 反初始化$td,释放资源
??? mcrypt_generic_deinit($td);
??? // 关闭资源对象,退出
???? mcrypt_module_close($td);
?>

上述过程完成了数据的加密过程.首先选择加密算法和加密模式创建mcrypt的资源对象和IV,然后初始化加密所需的buffer(内存),进行加密后再释放buffer,最后关闭资源对象.

PHP教程解密的过程和加密是基本相同,只要把mcrypt_generic($td,$input)替换成mdecrypt_generic($td,$input)就可以了,其它部分完全相同.当然,对于3des这种对称加密算法而言,加密、解密所用的key是必须完全相同的.

PHP教程6. 有关IV

PHP教程不是所有的模型中都需要IV. CFB和OFB是必须有IV,CBC和EBC则是可选的.对于必选IV的模式来说,其加密和解密的IV的值必须完全相同,CBC和EBC则无此要求.可以相同也可以不同,没什么关系.

PHP教程7.一个简单功能的加密解密类

代码如下:
class AMPCrypt {
??? private static function getKey(){
??????? return md5('exampleKey');
???? }
??? public static function encrypt($value){
???????? $td = mcrypt_module_open('tripledes','');
???????? $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_DEV_RANDOM);
???????? $key = substr(self::getKey(),mcrypt_enc_get_key_size($td));
???????? mcrypt_generic_init($td,$iv);
???????? $ret = base64_encode(mcrypt_generic($td,$value));
???????? mcrypt_generic_deinit($td);
???????? mcrypt_module_close($td);
??????? return $ret;
???? }
??? public static function dencrypt($value){
???????? $td = mcrypt_module_open('tripledes',mcrypt_enc_get_key_size($td));
???????? $key = substr(self::getKey(),$iv);
???????? $ret = trim(mdecrypt_generic($td,base64_decode($value))) ;
???????? mcrypt_generic_deinit($td);
???????? mcrypt_module_close($td);
??????? return $ret;
???? }
}

PHP教程PS:关于加密技术,本站还提供了如下加密工具供大家参考使用:

PHP教程MD5在线加密工具:

PHP教程Escape加密/解密工具:

PHP教程在线SHA1加密工具:

PHP教程短链(短网址)在线生成工具:

PHP教程短链(短网址)在线还原工具:

PHP教程高强度暗码生成器:

PHP教程希望本文所述对大家的PHP程序设计有所赞助.

欢迎参与《:php基于mcrypt的加密解密实例》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读