PHP实现的AES 128位加密算法示例


Posted in PHP onSeptember 16, 2019

本文实例讲述了PHP实现的AES 128位加密算法。分享给大家供大家参考,具体如下:

/*
加密算法一般分为两种:对称加密算法和非对称加密算法。
对称加密
对称加密算法是消息发送者和接收者使用同一个密匙,发送者使用密匙加密了文件,
接收者使用同样的密匙解密,获取信息。常见的对称加密算法有:des/aes/3des.
对称加密算法的特点有:速度快,加密前后文件大小变化不大,但是密匙的保管是个大问题
,因为消息发送方和接收方任意一方的密匙丢失,都会导致信息传输变得不安全。
非对称加密
与对称加密相对的是非对称加密,非对称加密的核心思想是使用一对相对的密匙
分为公匙和私匙,私匙自己安全保存,而将公匙公开。公钥与私钥是一对,如果用公钥对数据进行加密,
只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密发送数据前只需要使用接收方的公匙加密就行了。
常见的非对称加密算法有RSA/DSA:非对称加密虽然没有密匙保存问题,但其计算量大,加密速度很慢,有时候我们还需要对大块数据进行分块加密。
数字签名
为了保证数据的完整性,还需要通过散列函数计算得到一个散列值,这个散列值被称为数字签名。其特点有:
无论原始数据是多大,结果的长度相同的;
输入一样,输出也相同;
对输入的微小改变,会使结果产生很大的变化;
加密过程不可逆,无法通过散列值得到原来的数据;
常见的数字签名算法有md5,hash1等算法。
PHP的openssl扩展
openssl扩展使用openssl加密扩展包,封装了多个用于加密解密相关的PHP函数,极大地方便了对数据的加密解密。 常用的函数有:
对称加密相关:
string openssl_encrypt ( string $data , string $method , string $password)
其中$data为其要加密的数据,$method是加密要使用的方法,$password是要使用的密匙,函数返回加密后的数据;
其中$method列表可以使用openssl_get_cipher_methods()来获取
其解密函数为 string openssl_encrypt ( string $data , string $method , string $password)
非对称加密相关:
它们都只需要传入证书文件(一般是.pem文件);
使用公匙加密数据,其中$data是要加密的数据;$crypted是一个引用变量,加密后的数据会被放入这个变量中;$key是要传入的公匙数据;
由于被加密数据分组时,有可能不会正好为加密位数bit的整数倍,所以需要$padding(填充补齐),
$padding的可选项有 OPENSSL_PKCS1_PADDING, OPENSSL_NO_PADDING,分别为PKCS1填充,或不使用填充;
签名函数:$data为要签名的数据;$signature为签名结果的引用变量;$priv_key_id为签名所使用的私匙;$signature_alg为签名要使用的算法
,其算法列表可以使用openssl_get_md_methods()得到
验签函数:与签名函数相对,只不过它要传入与私匙对应的公匙;其结果为签名验证结果,1为成功,0为失败,-1则表示错误;
 * */
/*
 * 基于百度云API的例子
 * 密码一律采用AES 128位加密算法进行加密,用SK的前16位作为密钥,
 * 加密后生成的二进制字节流需要转成十六进制,并以字符串的形式传到服务端
 * */
function aes128WithFirst16Char($adminPass, $secretAccessKey)
{
  $adminPass = pkcs5Pad($adminPass);
  //把key值截取成16位的
  $secretAccessKey = substr($secretAccessKey, 0, 16);
  //进行AES加密
  $crypted = openssl_encrypt($adminPass, 'AES-128-ECB', $secretAccessKey, OPENSSL_RAW_DATA);
  //把字符串转换为16进制
  return bin2hex(substr($crypted, 0, 16));
}
//把密码填充成16位
function pkcs5Pad($adminPass)
{
  $pad = 16 - (strlen($adminPass) % 16);
  return $adminPass . str_repeat(chr($pad), $pad);
}
echo aes128WithFirst16Char('加密的密码','key值');
PHP 相关文章推荐
php编程实现获取excel文档内容的代码实例
Jun 28 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
浅析memcache启动以及telnet命令详解
Jun 28 PHP
php字符串截取的简单方法
Jul 04 PHP
PHP 线程安全与非线程安全版本的区别深入解析
Aug 06 PHP
php json与xml序列化/反序列化
Oct 28 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
php保存任意网络图片到服务器的方法
Apr 14 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
Oct 17 PHP
PHP数组访问常用方法解析
Sep 05 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 #PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 #PHP
PHP实现一个限制实例化次数的类示例
Sep 16 #PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 #PHP
php项目中类的自动加载实例讲解
Sep 12 #PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 #PHP
php创建多级目录与级联删除文件的方法示例
Sep 12 #PHP
You might like
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
thinkphp学习笔记之多表查询
2014/07/28 PHP
php中socket的用法详解
2014/10/24 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
写的htc的数据表格
2007/01/20 Javascript
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
解决vue单页路由跳转后scrollTop的问题
2018/09/03 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
Python Web静态服务器非堵塞模式实现方法示例
2019/11/21 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
毕业自我鉴定
2013/11/05 职场文书
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
毕业实习评语
2014/02/10 职场文书
送餐员岗位职责范本
2014/02/21 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
降消项目实施方案
2014/03/30 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python