一、AES简介

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:

注:此处暂时不详细介绍AES加密的内容,想进一步了解的读者可以去查找相关资料。

二、使用PHP进行AES加密:

class Aes {

private $key = null;

/**

*

* @param $key 密钥

* @return String

*/

public function __construct($key) {

//此处采用的是AES-128的方式进行加密,所以key值必须为16位的字符串

$this->key = $key;

}

/**

* Mcrypt的方式加密

* @param String input 加密的字符串

* @param String key   解密的key

* @return HexString

*/

public function encrypt($input = '') {

$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$input = $this->pkcs5_pad($input, $size);

$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

mcrypt_generic_init($td, $this->key, $iv);

$data = mcrypt_generic($td, $input);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

$data = base64_encode($data);

return $data;

}

/**

* 填充方式 pkcs5

* @param String text  原始字符串

* @param String blocksize   加密长度

* @return String

*/

private function pkcs5_pad($text, $blocksize) {

$pad = $blocksize - (strlen($text) % $blocksize);

return $text . str_repeat(chr($pad), $pad);

}

/**

* 解密

* @param String input 解密的字符串

* @param String key   解密的key

* @return String

*/

public function decrypt($sStr) {

$decrypted= mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$this->key,base64_decode($sStr), MCRYPT_MODE_ECB);

$dec_s = strlen($decrypted);

$padding = ord($decrypted[$dec_s-1]);

$decrypted = substr($decrypted, 0, -$padding);

return $decrypted;

}

/**

* 用openssl进行解密

* @param String data 加密的字符串

* @param String method   加密的方式

* @return String

*/

public function encrypt_openssl($data,$method = 'AES-128-ECB')

{

return openssl_encrypt($data,$method,$this->key);

}

/**

* 用openssl进行解密

* @param String data 解密的字符串

* @param String method   解密的方式

* @return String

*/

public function decrypt_openssl($data,$method = 'AES-128-ECB')

{

return openssl_decrypt($data,$method,$this->key);

}

}

接下来,我们如下使用以上的类:

$data = [

'name' => 'handsome',

'id' => 1

];

$data = http_build_query($data);

//http_build_query()函数能把数组转换成name=handsome&id=1这样的形式

$Aes = new Aes('handsome333rui77');//此处的key是随便输入的16位字符串

var_dump($Aes->encrypt($data)); //结果为:9lRks1VZcWHbh/z8LQWFNHEYcelQ8DcTS/y0uTFNhcc=

var_dump($Aes->decrypt('9lRks1VZcWHbh/z8LQWFNHEYcelQ8DcTS/y0uTFNhcc=')); //解密,结果为:name=handsome&id=1

var_dump($Aes->encrypt_openssl($data));  //加密

var_dump($Aes->decrypt_openssl('9lRks1VZcWHbh/z8LQWFNHEYcelQ8DcTS/y0uTFNhcc='));  //解密

注:在PHP7中,Mcrypt已经被抛弃,所以,php7版本以上的推荐使用openssl

php内置aes加密,PHP进行AES加密相关推荐

  1. md5加密解密代码_Python内置方法实现基于秘钥的信息加解密

    点击关注州的先生 精彩不容错过 在实际编程开发中,我们会使用到各类的加密算法来对数据和信息进行加密.比如密码中比较常见的MD5加密,以及AES加密等等.对于密码认证来说,MD5加密是比较适合的,因为其 ...

  2. c mysql加密解密_mysql内置加密函数对数据加密

    1 目的 有些业务场景,数据库中的敏感数据需要存储为密文形式,这里使用mysql内置加密函数对数据进行加密. 2 加密算法 对称加密算法:AES 加密后数据转换为:十六进制 3 内置函数说明 函数 说 ...

  3. C#.Net中的加密解密(AES、DES、RSA、MD5)、数字证书、HTTPS

    一.信息安全的基本概念,以及为什么要使用加密? 1.信息安全的定义 保密性(Confidentiality)  只有你自己和你允许的人能看到相关的信息. 完整性(Integrity)  信息收发过程中 ...

  4. C#实现AES算法对文件的加密解密

    本文实现了C#内置的AES算法对文件进行加密解密.有关AES的介绍不再赘述,主要讲如何实现文件的加密解密.项目工程源代码下载 网上的实现基本上都是要16,24或32位密码,密钥向量也要16位,都固定死 ...

  5. python aes加密 cbc_Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda...

    1.chr()函数 chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符. 2.s[a:b:c] s=(1,2,3,4,5) 1>. s[a]下标访 ...

  6. C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)

    一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应 ...

  7. 什么标准规定了aes加密_aes 128标准加密使用哪些字符

    AES算法基本知识 AES的全称是Advanced Encryption Standard,即高级加密标准.该项目由美国国家标准技术研究所(NIST)于1997年开始启动并征集算法,在2000年确定采 ...

  8. 0宽字符加密_前端AES加密方式分析,及其python实现

    在前端常见的加密方式中AES很少使用,因为相对于非对称的RSA安全性很低,AES是典型的对称加密,密钥就在前端源码里. 案列网站是http://ewt360.com,一个并不复杂的网站,首先抓个包看看 ...

  9. [crypto]-53-openssl命令行的使用(aes/rsa签名校验/rsa加密解密/hmac)

    常用技巧 如何编写一个二进制规律性的文件, 比如你可以编写一个"0123456789abcdef"的文本文件,记得删除换行符然后用ultraedit打开,ctrl+H就可以看到二进 ...

最新文章

  1. Python+Selenium自动化
  2. PIE SDK图层树伙伴控件示例
  3. linux内核学习之四:进程切换简述
  4. Spring注解编程基石(一)
  5. 2019-03-18-算法-进化(实现strStr())
  6. java jdbc 乱码_【求助】为什么用纯java jdbc插入mysql一直乱码
  7. ON1 photo raw 2021(ps/lr滤镜插件) 下载及安装
  8. 内存对齐 | 原来字段顺序还能影响结构体占用的内存空间
  9. 从数组创建ArrayList
  10. css flex布局
  11. Linux_异常_01_CentOS7无法ping 百度
  12. java中的DES,AES,BASE64,MD5和Cipher类\MessageDigest类
  13. sparkpython多线程_如何在PySpark(Spark流)中组合多个rdd?
  14. 旧板与IO板之间的连接
  15. C++ 不能在类体外指定关键字static
  16. java简易计算器程序框图_简易计算器程序设计思路及流程图
  17. K8S 探针 readinessProbe、livenessProbe和startupProbe
  18. 凌晨!科比因坠机离世, 球迷泪崩:凌晨4点,我的青春没了
  19. 线性代数——对向量的线性组合中的“线性”的理解
  20. 双非南京大学计算机夏令营,一名双非生的“失败”保研经历:夏令营不确定是否有保研资格,预推免上岸理想院校!...

热门文章

  1. 解决android开发在大屏手机图片出现内存溢出
  2. 程序员的第一步,你走对了吗?
  3. CPS1848国产替代芯片 国产SRIO交换芯片
  4. ZOJ 3452 Doraemon's Stone Game(博弈)
  5. 不会真的有人看不懂 Linux 小白都能看懂的大数据入门(一) 图文
  6. 即时定位与地图构建(SLAM)的相关研究
  7. python按钮虚化,深度学习与图像处理实例:人像背景虚化与背景替换
  8. VA41 销售合同创建BAPI
  9. mysql 微信昵称怎么保存_mysql 微信用户昵称emoji 完整保存
  10. Linux与UNIX的区别与联系