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 相关文章推荐
用函数读出数据表内容放入二维数组
Oct 09 PHP
PHP令牌 Token改进版
Jul 18 PHP
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 PHP
PHP文件大小格式化函数合集
Mar 10 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
Yii框架的redis命令使用方法简单示例
Oct 15 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
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
2016/10/13 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
Python 私有化操作实例分析
2019/11/21 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
中国高端家电购物商城:顺电
2018/03/04 全球购物
Java基础面试题
2014/07/19 面试题
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
小学运动会宣传稿
2015/07/23 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android
德生2P3收音机开箱评测
2022/04/30 无线电