php内置aes加密,PHP进行AES加密
一、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加密相关推荐
- md5加密解密代码_Python内置方法实现基于秘钥的信息加解密
点击关注州的先生 精彩不容错过 在实际编程开发中,我们会使用到各类的加密算法来对数据和信息进行加密.比如密码中比较常见的MD5加密,以及AES加密等等.对于密码认证来说,MD5加密是比较适合的,因为其 ...
- c mysql加密解密_mysql内置加密函数对数据加密
1 目的 有些业务场景,数据库中的敏感数据需要存储为密文形式,这里使用mysql内置加密函数对数据进行加密. 2 加密算法 对称加密算法:AES 加密后数据转换为:十六进制 3 内置函数说明 函数 说 ...
- C#.Net中的加密解密(AES、DES、RSA、MD5)、数字证书、HTTPS
一.信息安全的基本概念,以及为什么要使用加密? 1.信息安全的定义 保密性(Confidentiality) 只有你自己和你允许的人能看到相关的信息. 完整性(Integrity) 信息收发过程中 ...
- C#实现AES算法对文件的加密解密
本文实现了C#内置的AES算法对文件进行加密解密.有关AES的介绍不再赘述,主要讲如何实现文件的加密解密.项目工程源代码下载 网上的实现基本上都是要16,24或32位密码,密钥向量也要16位,都固定死 ...
- 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]下标访 ...
- C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)
一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应 ...
- 什么标准规定了aes加密_aes 128标准加密使用哪些字符
AES算法基本知识 AES的全称是Advanced Encryption Standard,即高级加密标准.该项目由美国国家标准技术研究所(NIST)于1997年开始启动并征集算法,在2000年确定采 ...
- 0宽字符加密_前端AES加密方式分析,及其python实现
在前端常见的加密方式中AES很少使用,因为相对于非对称的RSA安全性很低,AES是典型的对称加密,密钥就在前端源码里. 案列网站是http://ewt360.com,一个并不复杂的网站,首先抓个包看看 ...
- [crypto]-53-openssl命令行的使用(aes/rsa签名校验/rsa加密解密/hmac)
常用技巧 如何编写一个二进制规律性的文件, 比如你可以编写一个"0123456789abcdef"的文本文件,记得删除换行符然后用ultraedit打开,ctrl+H就可以看到二进 ...
最新文章
- Python+Selenium自动化
- PIE SDK图层树伙伴控件示例
- linux内核学习之四:进程切换简述
- Spring注解编程基石(一)
- 2019-03-18-算法-进化(实现strStr())
- java jdbc 乱码_【求助】为什么用纯java jdbc插入mysql一直乱码
- ON1 photo raw 2021(ps/lr滤镜插件) 下载及安装
- 内存对齐 | 原来字段顺序还能影响结构体占用的内存空间
- 从数组创建ArrayList
- css flex布局
- Linux_异常_01_CentOS7无法ping 百度
- java中的DES,AES,BASE64,MD5和Cipher类\MessageDigest类
- sparkpython多线程_如何在PySpark(Spark流)中组合多个rdd?
- 旧板与IO板之间的连接
- C++ 不能在类体外指定关键字static
- java简易计算器程序框图_简易计算器程序设计思路及流程图
- K8S 探针 readinessProbe、livenessProbe和startupProbe
- 凌晨!科比因坠机离世, 球迷泪崩:凌晨4点,我的青春没了
- 线性代数——对向量的线性组合中的“线性”的理解
- 双非南京大学计算机夏令营,一名双非生的“失败”保研经历:夏令营不确定是否有保研资格,预推免上岸理想院校!...