`

PHP mcrypt启用、加密以及解密过程详解

    博客分类:
  • PHP
 
阅读更多
Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。
1.安装PHP加密扩展Mcrypt
要使用该扩展,必须首先安装mcrypt标准类库,注意的是mcrypt软件依赖libmcrypt和mhash两个库。
 

 


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_MODE_来表示,如下面Mcrypt应用的例子:

DES算法表示为MCRYPT_DES;
ECB模式表示为MCRYPT_MODE_ECB;

3.PHP加密扩展库Mcrypt应用

先看一个例子,了解Mcrypt的工作流程,再来看看部分流程使用的函数:

<?php
    $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>";
?>

运行结果:

原文:我是李云
加密后的内容是:ʟ?Z懔e e��?
解密后的内容:我是李云

 

    //手册里的写法:
    //指定初始化向量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;

注:加密和解密函数中的参数cipher、key和mode必须一一对应,否则数据不能被还原。关于MCRYPT_RAND参见笔记Linux中的随机数文件 /dev/random /dev/urandom。

 
      PHP的Mcrypt扩展的mcrypt_create_iv, 如果你不指定的话, 默认使用/dev/random(Linux上), 作为随机数产生器. 这里的问题就在于/dev/random, 它的random pool依赖于系统的中断来产生. 当系统的中断数不足, 不够产生足够的随机数, 那么尝试读取的进程就会等待, 也就是会阻塞住
 

   当20个并发请求的时候, 服务器的中断数不够, 产生不了足够的随机数给mcrypt, 继而导致PHP进程等待, 从而表现出, 响应时间变长

   解决的办法就是, 改用/dev/urandom, /dev/urandom也是一个产生随机数的设备, 但是它不依赖于系统中断。

   $ rngd -r /dev/urandom -o /dev/random -t 1

   用urandom的结果填充entropy池子,这样既保证了entropy池的数量,也保证了随机性

   然而, 为什么PHP使用/dev/random作为默认, 这是因为理论上来说, /dev/urandom在一定的情况下, 可能会被可预测(参看: /dev/random), 所以一般上认为, /dev/urandom不如/dev/random安全。

 

http://my.oschina.net/yoyoko/blog/186800 

http://blog.csdn.net/ohmygirl/article/details/40385083  /dev/random和/dev/urandom的一点备忘

http://www.laruence.com/2012/09/24/2810.html  

Mcrypt响应慢的一个原因

分享到:
评论

相关推荐

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

    在PHP的标准安装过程中并没有默认安装Mcrypt扩展库,但可以通过添加相应的dll文件和修改PHP配置文件来启用Mcrypt库。Mcrypt库支持超过20种加密算法和8种加密模式。 Mcrypt库支持的加密算法包括但不限于CAST-128、...

    基于PHP_mcrypt_decrypt和JS_CryptoJS的AES CFB相互加密解密方法详解源码

    本文将深入讲解如何使用PHP的`mcrypt_decrypt`函数和JavaScript的CryptoJS库实现AES(Advanced Encryption Standard)CFB(Cipher Feedback)模式的加密解密,以确保数据在客户端与服务器间的安全交互。 AES是一种...

    php goto加密解密

    下面我们将深入探讨`goto`在PHP中的使用、加密解密的概念以及如何结合`goto`实现相关功能。 1. `goto` 语句: PHP中的`goto`语句始于PHP 5.3版本,其语法结构为 `goto label;`。`label`是程序员定义的一个标识符,...

    最新款goto解密工具源码,PHP加密解密反编译工具

    下面我们将深入探讨这个主题,了解加密、解密以及反编译的相关知识点。 1. **加密**:加密是一种信息安全技术,通过特定的算法将明文(可读数据)转换为密文(不可读数据),以防止非授权用户获取敏感信息。在PHP中...

    php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法

    本文将深入探讨如何使用`mcrypt_encrypt`和`mcrypt_decrypt`函数来实现字符串的加密和解密,确保数据的安全性。 `mcrypt_encrypt`和`mcrypt_decrypt`是PHP中用于加密和解密数据的内置函数。它们基于Mcrypt库,该库...

    功能强大的php加密解密类

    在PHP编程语言中,加密和解密是网络安全...理解加密解密的基础知识,以及如何在PHP中安全地实现这一过程,是确保应用程序安全的关键。通过自定义类,我们可以根据具体需求定制加密策略,同时保持代码的简洁性和易用性。

    易语言与PHP的RC4互相加密解密源码

    它以其简单、快速和高效而著名,适用于多种环境,包括...分析和理解这些代码,可以帮助深入学习RC4算法以及如何在不同编程语言间实现兼容的加密解密流程。如果你需要进一步的指导或代码解析,请提供该文本文件的内容。

    php基于mcrypt的加密解密实例

    PHP作为一种流行的服务器端脚本语言,其提供的mcrypt扩展是进行数据加密与解密的重要工具。本文将详细介绍PHP基于mcrypt扩展的加密解密实现方法,并通过实例分析mcrypt的原理与具体实现。 首先,mcrypt是PHP的一个...

    php_mcrypt.dll_php_mcrypt_

    《PHP Mcrypt扩展详解及其应用》 PHP Mcrypt是一个强大的加密库,它是PHP的一个扩展,提供了多种加密算法和模式,可以用于数据的安全存储和传输。本文将深入探讨PHP Mcrypt的功能、安装方法以及如何在实际项目中...

    风吟PHP 字符串加密/解密.rar

    综上所述,“风吟PHP 字符串加密/解密.rar”中的代码可能涉及了PHP的加密技术,包括但不限于对称加密算法如AES,可能的密钥管理策略,以及可能结合的非对称加密和哈希函数,所有这些都是为了保障数据的安全存储和...

    PHP基于密钥的加密解密函数

    - 解密则是加密的逆过程,通过密钥将密文还原为原始的明文。 2. **PHP中的加密库** PHP提供了一些内置的加密库,如MCrypt和OpenSSL。不过,由于MCrypt已在PHP 7.2中被弃用,所以我们现在主要关注使用OpenSSL库...

    PHP 加密解密方法

    本篇文章将深入探讨PHP中的加密和解密方法,以及如何利用它们来保护用户版权。 一、基础加密算法 1. **MD5**:Message-Digest Algorithm 5,是一种广泛使用的哈希函数,产生一个128位(16字节)的散列值。虽然不...

    利用PHP实现数据的加密及解密.pdf

    为了确保加密过程是可逆的,即加密后的数据可以准确无误地恢复为原始数据,可以利用PHP中的`Mcrypt`扩展库实现这一目标。 #### Mcrypt扩展库介绍 `Mcrypt`是一个功能强大的加密算法库,支持22种不同的加密算法,...

    PHP与js同时加密解密

    在实际项目中,我们需要根据需求选择合适的加密策略,并确保在`PHP`和`JavaScript`之间正确同步加密和解密的过程。同时,要注意保持代码的可维护性和遵循最佳实践,如避免硬编码密钥,定期更新加密算法以抵御新的...

    php AES加密解密

    - **解密**:先通过`base64_decode`函数将加密后的文本转换回二进制格式,再使用`mcrypt_decrypt`函数进行解密。 - **去除填充**:使用`rtrim`函数移除PKCS7填充添加的字符,还原原始数据。 #### 总结 通过上述...

    PHP 加密解密处理类

    这里我们将讨论一些常见的加密库和函数,以及如何在实际项目中创建自定义加密解密类。 1. **基础加密函数**: - **md5()**:提供128位散列值,但不适用于加密,只适合做数据校验。 - **sha1()**:与md5类似,提供...

    php_mcrypt.zip

    1. 加密与解密:Mcrypt提供了加密和解密功能,可以对数据进行安全保护,防止数据泄露。 2. 支持多种加密算法:包括AES、DES、3DES、Blowfish等,每种算法都有其特定的安全性和速度优势。 3. 工作模式选择:Mcrypt...

    java php DES 加密解密

    在PHP中,我们可以使用`mcrypt`扩展或内置的`openssl`扩展来实现DES加密解密。`mcrypt`现在已经被废弃,所以我们推荐使用`openssl`。下面是一个PHP的DES加密解密示例: ```php &lt;?php $key = '12345678'; // 8个字符...

Global site tag (gtag.js) - Google Analytics