PHP扩展mcrypt实现的AES加密功能示例
本文实例讲述了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 )
例如本机采用wampserver环境,直接开启了mcrypt扩展:
其中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));
输出结果
问题,不知道是什么原因,解密后的字符串(见上图),末尾还留下有不可见的填充字符,当明文刚好可以分组时则没有。
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
文字在线加密解密工具(包含AES、DES、RC4等): http://tools.zalou.cn/password/txt_encode
MD5在线加密工具: http://tools.zalou.cn/password/CreateMD5Password
在线散列/哈希算法加密工具: http://tools.zalou.cn/password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具: http://tools.zalou.cn/password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具: http://tools.zalou.cn/password/sha_encode
希望本文所述对大家PHP程序设计有所帮助。
- spark2.x依赖包POM
- P03_Hive 安装
- P06_flume-ng-1.5.0-cdh5.3.6安装
- P04_zookeeper-cdh5集群搭建
- P05_kafka_2.9.2-0.8.1集群搭建
- 再探matplotlib
- 分布式系统(Distributed System)资料
- Python性能提升20倍居然不是标题党?
- Spark开发电商日志分析用户行为聚合功能练习下面开始搭建开发环境注意Task表中最后一个列task_param中,Json的StartDate和EndDate需要设置成今天,因为mock数据的时候,
- HDU 3783 ZOJ
- HDU 1412 {A} + {B}
- HDU 2092 整数解
- Hadoop数据分析平台实战——020Hadoop Shell命令(初学跳过)离线数据分析平台实战——020Hadoop Shell命令(可跳过)
- HDU 2080 夹角有多大II
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 3. Kubernetes集群安装
- macOS VirtualBox 桥接模式 设置静态ip 且能和联网
- 重新初始化k8s master节点
- 5.k8s基本命令汇总
- 6. k8s + jenkins 实现持续集成(完)
- 7. 复制k8s Node节点 并重新初始化k8s-nodes2节点 (k8s连载)
- 8.k8s连载--重新生成k8s token(kubeadm join报错及解决)
- 3. dcoker容器的命令
- 4. 镜像的原理
- 5.docker容器数据卷
- 6. Dockerfile详解
- 3.docker搭建一个博客平台
- 4. Docker 私有仓库搭建
- 抓包工具Charles
- 5.docker仓库--harbor