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 相关文章推荐
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
Jun 18 PHP
php三维数组去重(示例代码)
Nov 26 PHP
PHP 读取和编写 XML
Nov 19 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
php如何获取文件的扩展名
Oct 28 PHP
yii框架无限极分类的实现方法
Apr 08 PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 PHP
PHP addAttribute()函数讲解
Feb 03 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
使用Laravel中的查询构造器实现增删改查功能
Sep 03 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 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中如何防止表单的重复提交
2013/08/02 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
ie8本地图片上传预览示例代码
2014/01/12 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
几行js代码实现自适应
2017/02/24 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
大专毕业生自我评价分享
2013/11/10 职场文书
卫校护理专业毕业生求职信
2013/11/26 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
安全例会汇报材料
2014/08/23 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
小学英语听课心得体会
2016/01/14 职场文书
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android