`

mcrypt启用 加密以及解密过程详细解析

 
阅读更多

Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示

Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。

1.PHP加密扩展库Mcrypt安装
在标准的PHP安装过程中并没有把Mrcypt安装上,但PHP的主目录下包含了libmcrypt.dll和libmhash.dll文件 (libmhash.dll是Mhash扩展库,这里可以一起装上)。首先,将这两个文件复制到系统目录windows\system32下,然后在 PHP.ini文件中按Ctrl+F快捷键跳出查找框,并找到;extension=php-mcrypt.dll和; extension=php_mhash.dll这两个语句,接着将前面的“;”去掉;最后,保存并重启Apache服务器即可生效。

2.PHP加密扩展库Mcrypt的算法和加密模式
Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示,结果如下:

Mcrypt支持的算法有:cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes

Mcrypt支持的加密模式有:cbc cfb ctr ecb ncfb nofb ofb stream

这些算法和模式在应用中要以常量来表示,写的时候加上前缀MCRYPT_和MCRYPT_来表示,如下面Mcrypt应用的例子:
DES算法表示为MCRYPT_DES;
ECB模式表示为MCRYPT_MODE_ECB;

3.PHP加密扩展库Mcrypt应用
先看一个例子,了解Mcrypt的工作流程,再来看看部分流程使用的函数:

$str = "我是李云";
    $key = "123qwe.019860905061X";
    $cipher = MCRYPT_RIJNDAEL_128;
    $mode = MCRYPT_MODE_ECB;
    $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$mode),MCRYPT_RAND);
    echo "原文:".$str."<br>";
    $str_encrypt = mcrypt_encrypt($cipher,$key,$str,$mode,$iv);
    echo "加密后的内容是:".$str_encrypt."<br>";
    $str_decrypt = mcrypt_decrypt($cipher,$key,$str_encrypt,$mode,$iv);
    echo "解密后的内容:".$str_decrypt."<br>";

 运行结果:

 

原文:我是李云
加密后的内容是:B@鴹�=(I辩蝣Z%
解密后的内容:我是李云

<1>由例子中可看到,使用PHP加密扩展库Mcrypt对数据加密和解密之前,首先创建了一个初始化向量,简称为iv。由 $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND);可见创建初始化 向 量需要两个参数:size指定了iv的大小;source为iv的源,其中值MCRYPT_RAND为系统随机数。

<2>函数mcrypt_get_iv_size($cipher,$modes)返回初始化向量大小,参数cipher和mode分别指算法和加 密模式。

<3>加密函数$str_encrypt = mcrypt_encrypt($cipher,$key,$str,$modes,$iv); 该函数的5个参数分 别如下:cipher——加密算法、key——密钥、data(str)——需要加密的数据、mode——算法模式、 iv——初始化向量

<4>解密函数 mcrypt_decrypt($cipher,$key,$str_encrypt,$modes,$iv); 该函数和加密函数的参数几乎 一样,唯一不同的是data,也就是说data为需要解密的数据$str_encrypt,而不是原始数据$str。

//手册里的写法:

  //指定初始化向量iv的大小:
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    //创建初始化向量:
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    //加密密码:
    $key = "123qwe.019860905061x";
    //原始内容(未加密):
    $text = "My name is Adam Li!";
    echo $text. "<br>\n";
    //加密后的内容:
    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
    echo $crypttext. "\n<br>";
    //解密已经加密的内容:
    $str_decrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
    echo $str_decrypt;

 下面是一个加/解密请求的例子:

$request_params = array(
 'controller' => 'todo',
 'action' => 'read',
 'username' => "bl",
 'userpass' => "a1"
);
$private_key = "28e336ac6c9423d946ba02d19c6a2632";
//encrypt request
$enc_request = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $private_key, json_encode($request_params), MCRYPT_MODE_ECB));
echo "CRYPT:".$enc_request."<br/>";
//decrypt request
$params = json_decode(trim(mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $private_key, base64_decode($enc_request), MCRYPT_MODE_ECB )),true);
echo "ENCRYPT:<br/>";
//print result
var_dump($params);

 注:加密和解密函数中的参数cipher、key和mode必须一一对应,否则数据不能被还原。

分享到:
评论

相关推荐

    php_mcrypt.dll_php_mcrypt_

    PHP Mcrypt扩展是基于libmcrypt库开发的,它包含了多种对称加密算法,如DES、3DES、Blowfish、Twofish等,以及各种加密模式如CBC(Cipher Block Chaining)、ECB(Electronic Codebook)和CFB(Cipher Feedback)。...

    php-mcrypt-5.3.3-1.el6.i686.rpm libmcrypt-2.5.8-9.el6.i686.rpm php mcrypt扩展

    而`php-mcrypt`则是PHP的Mcrypt扩展,使得PHP能够调用`libmcrypt`库中的函数进行加密和解密操作。在本案例中,我们有两个相关的RPM(Red Hat Package Manager)文件:`libmcrypt-2.5.8-9.el6.i686.rpm` 和 `...

    php_mcrypt-1.0.3-7.2-ts-vc15-x64.zip

    当PHP解析器启动时,会查找此DLL来启用Mcrypt的功能。 2. **LICENSE**:通常包含了该软件的许可协议信息,这表明了使用php_mcrypt扩展的合法性和条件,可能遵循的是开源许可证,比如MIT、GPL或BSD等。 3. **...

    PHP扩展mcrypt实现的AES加密功能示例

    AES(高级加密标准)是一种广泛使用的区块加密算法...总之,使用mcrypt扩展来实现AES加密解密是一个快速有效的方法,无需从头实现算法细节,同时也需要注意正确选择和使用加密模式和初始化向量以保证加密过程的安全性。

    PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决

    这些方法共同工作以完成3DES加密解密过程。在加密和解密方法中,作者使用了`mcrypt_module_open()`来初始化mcrypt模块,并设置加密模式为CBC(Cipher Block Chaining)。需要注意的是,这段代码在没有正确安装mcrypt...

    PHP使用DES进行加密与解密的方法详解

    加密解密过程中使用到的mcrypt_module_open函数用于打开一个加密模块实例,指定使用的是tripledes算法(即3DES,DES的增强版,使用168位密钥)和加密模式(这里是ecb模式)。然后通过mcrypt_create_iv函数创建初始化...

    php结合md5实现的加密解密方法

    在讲解PHP结合MD5实现的加密解密方法之前,我们首先需要理解MD5以及PHP中实现加密解密的基本概念。 MD5全称为Message-Digest Algorithm 5,是一种广泛使用的密码散列函数,能够产生出一个128位(16字节)的散列值...

    php_curl php_mcrypt php_mhash开启

    本文将详细介绍这三个扩展的用途、安装方法以及如何在项目中启用它们。 首先,`php_curl`扩展是PHP与URL相关的库,它提供了强大的HTTP请求功能。通过cURL,开发者可以方便地执行HTTP、HTTPS、FTP、FTPS等协议的请求...

    php实现cookie加密的方法

    PHP实现cookie加密主要涉及到几个关键的技术点和概念,包括对cookie的操作、加密解密算法的应用、以及在PHP中如何实现这一过程。下面将详细介绍这些知识点。 首先,了解cookie的机制是实现加密的基础。Cookie是由...

    php实现的AES加密类定义与用法示例

    通过上述知识点的分析,我们可以看到,PHP实现的AES加密类涵盖了从加密算法选择、加密模式配置、数据处理(包括填充和去除填充)、到加密解密操作的全过程。使用此类可以方便地在PHP应用中实现数据的加密和解密,...

    PHP使用openssl扩展实现加解密方法示例

    本篇文章将详细讲解如何使用openssl扩展在PHP中实现加解密,特别是以DES-CBC(Data Encryption Standard - Cipher Block Chaining)加密模式为例。 DES是一种经典的块加密算法,每个数据块由64位组成,其中8位是...

    libmcrypt.so.rar

    它支持包括DES、3DES、Blowfish、Twofish、RC4、GOST等在内的多种加密算法,这些算法广泛应用于数据加密、解密以及密码学安全等领域。libmcrypt.so.4是libmcrypt库的一个特定版本,通常作为动态链接库文件,供其他...

    libmcrypt-2.5.8.tar.gz

    本文将详细探讨libmcrypt-2.5.8版本以及如何解决PHP加载mcrypt扩展的问题。 libmcrypt-2.5.8是libmcrypt库的一个具体版本,发布于2006年,它包含了对多种加密算法的支持,这些算法在数据安全领域有着广泛的应用。...

    无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案

    这通常表明在PHP环境下没有启用mcrypt扩展,而mcrypt扩展对于phpMyAdmin来说是必要的,因为它提供了数据加密和解密的功能。要解决这个问题,我们从以下几个方面来进行排查和解决。 首先,确认MySQL数据库是否已经...

    Laravel开发-laravel-openssl-encryption

    本篇文章将深入探讨Laravel开发中的OpenSSL加密,以及如何在实际项目中使用这个扩展。 首先,Laravel的加密机制基于AES-256算法,这是业界广泛接受的加密标准。默认情况下,Laravel使用`mcrypt`库进行加密,但自...

Global site tag (gtag.js) - Google Analytics