AES加密解密(使用php扩展mcrypt实现AES加密)

2024-06-13 17:48

本文主要是介绍AES加密解密(使用php扩展mcrypt实现AES加密),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AES加密解密

AES(Advanced Encryption Standard,高级加密标准)是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。Rijndael是在AES中使用的基本密码算法。


对于此算法网上流传有很多php代码实现的版本,其实php的扩展mcrypt完全支持此加密算法,不必要自己去写代码实现。先不说自己写费时费力(当然你若是想研究此加密算法,那另说),使用php代码实现的算法效率也不会太高。


mcrypt扩展在php中默认是没有的,需要自己安装配置,其方法可以在网上搜索,这里不在详述。你可以使用以下代码检查你的php环境是否支持mcrypt

[php]  view plain  copy
  1. $cipher_list = mcrypt_list_algorithms();//mcrypt支持的加密算法列表  
  2. $mode_list = mcrypt_list_modes();   //mcrypt支持的加密模式列表  
  3.   
  4. echo '<xmp>';  
  5. print_r($cipher_list);  
  6. print_r($mode_list);  
若你的环境支持mcrypt,输出结果应该如下:

[plain]  view plain  copy
  1. Array  
  2. (  
  3.     [0] => cast-128  
  4.     [1] => gost  
  5.     [2] => rijndael-128  
  6.     [3] => twofish  
  7.     [4] => arcfour  
  8.     [5] => cast-256  
  9.     [6] => loki97  
  10.     [7] => rijndael-192  
  11.     [8] => saferplus  
  12.     [9] => wake  
  13.     [10] => blowfish-compat  
  14.     [11] => des  
  15.     [12] => rijndael-256  
  16.     [13] => serpent  
  17.     [14] => xtea  
  18.     [15] => blowfish  
  19.     [16] => enigma  
  20.     [17] => rc2  
  21.     [18] => tripledes  
  22. )  
  23. Array  
  24. (  
  25.     [0] => cbc  
  26.     [1] => cfb  
  27.     [2] => ctr  
  28.     [3] => ecb  
  29.     [4] => ncfb  
  30.     [5] => nofb  
  31.     [6] => ofb  
  32.     [7] => stream  
  33. )  
其中rijndael-128,rijndael-192,rijndael-256就是AES加密,3种分别是使用不同的数据块和密钥长度进行加密。

以下是使用扩展mcrypt实现AES加密的简单示例

 

[php]  view plain  copy
  1. /** 
  2.  * 利用mcrypt做AES加密解密 
  3.  * @author ts24<tsxw24@gmail.com> 
  4.  */  
  5.   
  6. abstract class AES{  
  7.     /** 
  8.      * 算法,另外还有192和256两种长度 
  9.      */  
  10.     const CIPHER = MCRYPT_RIJNDAEL_128;  
  11.     /** 
  12.      * 模式  
  13.      */  
  14.     const MODE = MCRYPT_MODE_ECB;  
  15.   
  16.     /** 
  17.      * 加密 
  18.      * @param string $key   密钥 
  19.      * @param string $str   需加密的字符串 
  20.      * @return type  
  21.      */  
  22.     static public function encode( $key$str ){  
  23.         $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND);  
  24.         return mcrypt_encrypt(self::CIPHER, $key$str, self::MODE, $iv);  
  25.     }  
  26.       
  27.     /** 
  28.      * 解密 
  29.      * @param type $key 
  30.      * @param type $str 
  31.      * @return type  
  32.      */  
  33.     static public function decode( $key$str ){  
  34.         $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND);  
  35.         return mcrypt_decrypt(self::CIPHER, $key$str, self::MODE, $iv);  
  36.     }  
  37. }  

使用示例:

[php]  view plain  copy
  1. $str = '我是明文我是明文我是明文我是明文我是明文dsfdghgasdfasdddddddd';  
  2. $key = 'aSGJLGYEWERWRREW4567i8o';  
  3.   
  4. $str1=AES::encode($key$str);  
  5. $str2=AES::decode($key$str1);  
  6.   
  7.   
  8. echo '<xmp>';  
  9. var_dump($str);  
  10. var_dump($str1);  
  11. var_dump($str2);  
  12. var_dump(rtrim($str2));  

输出结果

问题,不知道是什么原因,解密后的字符串(见上图),末尾还留下有不可见的填充字符,当明文刚好可以分组时则没有。


这篇关于AES加密解密(使用php扩展mcrypt实现AES加密)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057996

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr