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 检查扩展库或函数是否可用的代码
Apr 06 PHP
非常好用的两个PHP函数 serialize()和unserialize()
Feb 04 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
PHP中使用smarty生成静态文件的例子
Apr 24 PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
Feb 15 PHP
PHP MPDF中文乱码的解决方式
Dec 08 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
PHP对象实例化单例方法
Jan 19 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP钩子实现方法解析
May 21 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
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
Chrome Web App开发小结
2014/09/04 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
Python中字典和JSON互转操作实例
2015/01/19 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
django 发送手机验证码的示例代码
2018/04/25 Python
python操作excel的方法
2018/08/16 Python
使用numba对Python运算加速的方法
2018/10/15 Python
python程序变成软件的实操方法
2019/06/24 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
幼儿园消防安全制度
2014/01/26 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
英语教育专业自荐信
2014/05/29 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
无房证明样本
2015/06/17 职场文书