本文实例讲述了php基于mcrypt实现加密解密的方法。分享给大家供大家参考。具体实现方法如下:

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

1.简介

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

2.安装和使用

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

3.四种块加密模型

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

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

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

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

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

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

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

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

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

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

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

如命令行执行:

php -r "var_dump(mcrypt_list_modes()); var_dump(mcrypt_list_algorithms());"

即可列出所有的结果。

5.如何使用

示例1:

$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);

?>

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

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

示例2:

$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, $key, $iv);

// 进行加密

$encrypted_data = mcrypt_generic($td, $input);

// 反初始化$td,释放资源

mcrypt_generic_deinit($td);

// 关闭资源对象,退出

mcrypt_module_close($td);

?>

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

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

6. 有关IV

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

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

class AMPCrypt {

private static function getKey(){

return md5('exampleKey');

}

public static function encrypt($value){

$td = mcrypt_module_open('tripledes', '', 'ecb', '');

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);

$key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));

mcrypt_generic_init($td, $key, $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', '', 'ecb', '');

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);

$key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));

$key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));

mcrypt_generic_init($td, $key, $iv);

$ret = trim(mdecrypt_generic($td, base64_decode($value))) ;

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

return $ret;

}

}

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

希望本文所述对大家的PHP程序设计有所帮助。

php mcrypt_rand,php基于mcrypt的加密解密实例相关推荐

  1. php在线解密mcrypt,PHP 基于 Mcrypt 的加密解密简单类

    最近的一个项目项目中需要对 Cookie 加密,所以使用到了 Mcrypt 的方法进行加密解密的工作,于是我就整理成一个简单的类,以后直接简单调用类实现即可. Mcrypt 介绍 Mcrypt 是 P ...

  2. python加密解密算法_Python基于DES算法加密解密实例

    #coding=utf-8 from functools import partial import base64 class DES(object): """ DES加 ...

  3. php aec 解密sha1,PHP加密解密实例分析 - sha1

    ...p> 4.1以后版本 4.1以后数据库保存的密码是用SHA1加密的:SHA1(SHA1(password)) 1.服务器发送随机字符串(scramble)给客户端. 2.客户端作如下计算: ...

  4. mcrypt php 加密解密,mcrypt启用 加密以及解密过程详细解析

    Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原. 1.PHP加密扩展库Mcrypt安装在标准的PHP安装过程中并没有把Mrcypt安装上,但PHP的主目录下包含了libmc ...

  5. 提供一个基于.NET的加密/解密算法

    提供一个基于.NET SymmetricAlgorithm 类的.带私钥的加密/解密算法的包装类.使用方法: symmcrypto de = new SymmCrypto(SymmCrypto.Sym ...

  6. mcrypt php 加密解密,PHP mcrypt启用、加密以及解密过程详解

    Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原. 1.安装PHP加密扩展Mcrypt 要使用该扩展,必须首先安装mcrypt标准类库,注意的是mcrypt软件依赖libmc ...

  7. csharp base64加密java解密_C#自定义基于Base64的加密解密类

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. using System; using System.Security.Cryptogra ...

  8. 基于MySQL的加密解密方式

    工具 mysql 8 navicat 初级加密解密 最无脑的加密,原文为aaa,密钥为aaabbbccc SELECT AES_ENCRYPT("aaa","aaabbb ...

  9. pgp解密 java_Java PGP加密解密实例教程详细操作步骤

    本文将一步步告诉大家PGP的使用步骤,看完大家就立马可以在项目及工作环境中使用起来,so easy!!! 1,首先了解什么是PGP,PGP的工作原理是什么?这个直接百度百科,我不啰嗦. PGP是英文 ...

最新文章

  1. angular例子笔记
  2. [CSAcademy]Virus on a Tree
  3. 隔板都被拉去做核酸了?
  4. 传入一个中文字符串,返回一个字符串中的中文拼音
  5. where in的sql语句按照指定ID进行排序的解决方法
  6. 欧几里得范数_浅谈机器学习中的范数
  7. 谈论源码_当我们谈论软件“替代品”时,这是什么意思?
  8. windows vs编译环境 python_Python虚拟环境使用(Windows)
  9. java之的读取文件大全
  10. 理解Go的Goroutine和channel
  11. PhoenixFramework自动化测试平台部署初始化说明
  12. 我就是为了小米刷机工具写的
  13. 由一篇作文《一件有意义的事》展开的
  14. unity如何实现图片透视_实战 | 自己实现扫描全能王
  15. Javaweb新手软件推荐
  16. 消灭害虫V1.0 | EliminatePests V1.0
  17. 避免2.4GHz ISM频段各种类型无线设备干扰的技术
  18. 信息论 | 计算离散信源的信息量和熵的MATLAB实现(函数封装调用)
  19. 从零开始搭建自己的云服务器
  20. 几个常用的js 函数汇总大全

热门文章

  1. css图片居中(水平居中和垂直居中)
  2. 庆祝「奎特尔」800+勇士,集结!
  3. TCP初始拥塞窗口与初始接收窗口
  4. knife4j 替代swagger2接口文档管理
  5. 使用ftp命令进行断点续传(reget、restart)
  6. Elasticsearch Term Vectors(词频统计)
  7. 《黑神话:悟空》gameplay相关的技术和调整细节整理
  8. HTML获取当前时间年月日时分秒等相关信息
  9. 给自己一些激励(不断更新)
  10. 选座php,ticketbooking 电影院在线售票系统,可以 选座功能和 订票 ,分为前台管理和后 WEB(ASP,PHP,...) 246万源代码下载- www.pudn.com...