Home Backend Development PHP Tutorial php基于mcrypt的加密解密实例_php技巧

php基于mcrypt的加密解密实例_php技巧

May 16, 2016 pm 08:33 PM
mcrypt php encryption Decrypt

本文实例讲述了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;
     }
}

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

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

CakePHP Quick Guide CakePHP Quick Guide Sep 10, 2024 pm 05:27 PM

CakePHP is an open source MVC framework. It makes developing, deploying and maintaining applications much easier. CakePHP has a number of libraries to reduce the overload of most common tasks.

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Get the gate.io installation package for free Get the gate.io installation package for free Feb 21, 2025 pm 08:21 PM

Gate.io is a popular cryptocurrency exchange that users can use by downloading its installation package and installing it on their devices. The steps to obtain the installation package are as follows: Visit the official website of Gate.io, click "Download", select the corresponding operating system (Windows, Mac or Linux), and download the installation package to your computer. It is recommended to temporarily disable antivirus software or firewall during installation to ensure smooth installation. After completion, the user needs to create a Gate.io account to start using it.

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

List of top ten exchanges in the currency circle List of top ten exchanges in the currency circle Feb 21, 2025 pm 10:18 PM

The top ten exchanges in the currency circle are ranked by trading volume: Binance Ouyihuobi FTXKrakenCoinbaseGeminiBitfinexBybitGate.io

See all articles