使用php扩展mcrypt实现AES加密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: AES(Advanced Encryption Standard,高级加密标准)是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。Rijndael是在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));  


输出结果

 

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

 

如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
|
11天前
|
Linux PHP 数据安全/隐私保护
2024授权加密系统PHP网站源码
2024授权加密系统PHP网站源码
90 58
|
3月前
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
85 1
|
3月前
|
数据安全/隐私保护
aes之ecb模式的加密解密
aes之ecb模式的加密解密
|
3月前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
157 8
|
2月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
147 0
|
3月前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
83 1
|
3月前
|
安全 算法 数据安全/隐私保护
黑客克星!Python加密艺术大公开,AES、RSA双剑合璧,守护你的数字世界
在这个数据泛滥的时代,数字世界既充满了知识,也潜藏安全隐患。Python 作为强大的编程语言,以其独特的加密技术为我们的信息安全保驾护航。本文将介绍 AES 和 RSA 这两种加密算法,揭示它们如何协同工作,保护你的数字世界。AES(高级加密标准)以其高效、安全著称,能将敏感信息转化为难以破解的乱码。Python 的 `pycryptodome` 库让 AES 加密变得简单易行。然而,AES 面临密钥分发难题,此时 RSA(非对称加密算法)便大显身手,通过公钥加密、私钥解密的方式确保密钥传输安全。AES 与 RSA 在 Python 中交织成一道坚不可摧的防护网,共同守护我们的数字世界。
91 0
|
安全 PHP 数据安全/隐私保护
PHP6种加密方法介绍
PHP6种加密方法
1355 0
|
1月前
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
43 0
|
25天前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####