使用php扩展mcrypt实现AES加密
AES(Advanced Encryption Standard,高级加密标准)是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。Rijndael是在AES中使用的基本密码算法。
对于此算法网上流传有很多php代码实现的版本,其实php的扩展mcrypt完全支持此加密算法,不必要自己去写代码实现。先不说自己写费时费力(当然你若是想研究此加密算法,那另说),使用php代码实现的算法效率也不会太高。
mcrypt扩展在php中默认是没有的,需要自己安装配置,其方法可以在网上搜索,这里不在详述。你可以使用以下代码检查你的php环境是否支持mcrypt
- $cipher_list = mcrypt_list_algorithms();//mcrypt支持的加密算法列表
- $mode_list = mcrypt_list_modes(); //mcrypt支持的加密模式列表
- echo '<xmp>';
- print_r($cipher_list);
- print_r($mode_list);
若你的环境支持mcrypt,输出结果应该如下:
- Array
- (
- [0] => cast-128
- [1] => gost
- [2] => rijndael-128
- [3] => twofish
- [4] => arcfour
- [5] => cast-256
- [6] => loki97
- [7] => rijndael-192
- [8] => saferplus
- [9] => wake
- [10] => blowfish-compat
- [11] => des
- [12] => rijndael-256
- [13] => serpent
- [14] => xtea
- [15] => blowfish
- [16] => enigma
- [17] => rc2
- [18] => tripledes
- )
- Array
- (
- [0] => cbc
- [1] => cfb
- [2] => ctr
- [3] => ecb
- [4] => ncfb
- [5] => nofb
- [6] => ofb
- [7] => stream
- )
其中rijndael-128,rijndael-192,rijndael-256就是AES加密,3种分别是使用不同的数据块和密钥长度进行加密。
以下是使用扩展mcrypt实现AES加密的简单示例
- /**
- * 利用mcrypt做AES加密解密
- * @author ts24<tsxw24@gmail.com>
- */
- abstract class AES{
- /**
- * 算法,另外还有192和256两种长度
- */
- const CIPHER = MCRYPT_RIJNDAEL_128;
- /**
- * 模式
- */
- const MODE = MCRYPT_MODE_ECB;
- /**
- * 加密
- * @param string $key 密钥
- * @param string $str 需加密的字符串
- * @return type
- */
- static public function encode( $key, $str ){
- $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND);
- return mcrypt_encrypt(self::CIPHER, $key, $str, self::MODE, $iv);
- }
- /**
- * 解密
- * @param type $key
- * @param type $str
- * @return type
- */
- static public function decode( $key, $str ){
- $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND);
- return mcrypt_decrypt(self::CIPHER, $key, $str, self::MODE, $iv);
- }
- }
使用示例:
- $str = '我是明文我是明文我是明文我是明文我是明文dsfdghgasdfasdddddddd';
- $key = 'aSGJLGYEWERWRREW4567i8o';
- $str1=AES::encode($key, $str);
- $str2=AES::decode($key, $str1);
- echo '<xmp>';
- var_dump($str);
- var_dump($str1);
- var_dump($str2);
- var_dump(rtrim($str2));
输出结果

问题,不知道是什么原因,解密后的字符串(见上图),末尾还留下有不可见的填充字符,当明文刚好可以分组时则没有。
使用php扩展mcrypt实现AES加密的更多相关文章
- PHP 使用AES加密,并扩展失效时间检测
/** * 具有时间校验的AES加密 * @param string $string 要处理的字符串 * @param int $timeout 超时时间,单位秒 * @param string $t ...
- PHP7.2中AES加密解密方法mcrypt_module_open()替换方案 Function mcrypt_get_block_size() is deprecated
直接粘代码,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于彬彬大学APP接口token校验中. php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂.因此它被 ...
- javascript AES加密 C#AES解密实现
首先需要引入js类库 crypto-js(开源),地址:http://code.google.com/p/crypto-js 现在很多人无法打开这个地址不要紧,下面我们会将全部代码贴出来 需要引入 a ...
- 信息安全-加密:AES 加密
ylbtech-信息安全-加密:AES 加密 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一 ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】
一:Mcrypt简介 Mcrypt是PHP的一个扩展,完成了常用加密算法的封装.其实该扩展是对mcrypt标准类库的封装,mcrypt完成了相当多的常用加密算法,如DES, TripleDES, Bl ...
- JAVA的对称加密算法AES——加密和解密
出自: http://blog.csdn.net/hongtashan11/article/details/6599645 http://www.cnblogs.com/liunanjava/p/42 ...
- [PHP]AES加密----PHP服务端和Android客户端
本文采取128位AES-CBC模式加密和解密 1.首先对服务端安装mcrypt: sudo apt-get install php5-mcrypt php5-dev sudo php5enmod mc ...
- AES加密原理和AOE工程实践
在AI业务的开发的过程中,我们常常需要对模型文件进行加密.我们从以下几个方面来说一说AES的加密原理以及AOE里的工程实践. 常见的加密算法 AOE对模型加密需求的思考 AES的加密原理 AOE工程实 ...
随机推荐
- STL源码分析-function
http://note.youdao.com/noteshare?id=269e16541b43095eaf97636d4e046b1d
- google的几道面试题
Question1:如何判断两个矩形是否有重叠区域? Answer(java): public boolean checkCross(Rectangle m, Rectangle n) { //求出m ...
- Spring 源码学习(2) —— FactoryBean 的使用
一般情况下, Spring是通过反射机制利用bean的class属性指定实现类来完成实例化bean的.在某些特定的情况下, 想做一些定制,Spring为此提供了一个org.springframewor ...
- NOIP模拟赛16
NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day2 期望得分:100+100+ =200+ 实际得分:100+40+70=210 T1天天寄快递 直接模拟,代码丢了...... T2天天和不 ...
- 图论&数学:最小平均值环
POJ2989:求解最小平均值环 最优化平均值的显然做法是01分数规划 给定一个带权有向图 对于这个图中的每一个环 定义这个环的价值为权值之和的平均值 对于所有的环,求出最小的平均值 这个结论怎么做的 ...
- HDU 2608 底数优化分块 暴力
T(n) as the sum of all numbers which are positive integers can divied n. and S(n) = T(1) + T(2) + T( ...
- 2015/10/9 Python核编初级部分学习总结
终于在十一长假之后的两天看完了<Python核心编程>的初级部分.虽然到后来两章,类和环境看得越来越慢,越来越难以理解.很多东西只能靠强记,也没办法真正掌握了,我想了想,还是不强迫自己去背 ...
- hbase性能调优案例
hbase性能调优案例 1.人员-角色 人员有多个角色 角色优先级 角色有多个人员 人员 删除添加角色 角色 可以添加删除人员 人员 角色 删除添加 设计思路 person表 ...
- MongoDB - MongoDB CRUD Operations, Query Documents, Iterate a Cursor in the mongo Shell
The db.collection.find() method returns a cursor. To access the documents, you need to iterate the c ...
- kartik\grid\GridView 合计,多选,导出excel,header修改 等方法集合!
先上完整demo 具体的以后再说 <?php //use yii\web\View; use kartik\grid\GridView; use yii\bootstrap\Html; use ...