php接口数据加密、解密、验证签名


Posted in PHP onMarch 12, 2015

代码很简单,这里就不多废话了,直接奉上代码

<?php

//header('Content-Type: text/xml; charset=utf-8');

include_once(dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'phpsec'.DIRECTORY_SEPARATOR.'Math'.DIRECTORY_SEPARATOR.'BigInteger.php');

include_once(dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'phpsec'.DIRECTORY_SEPARATOR.'Crypt'.DIRECTORY_SEPARATOR.'AES.php');

include_once(dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'phpsec'.DIRECTORY_SEPARATOR.'Crypt'.DIRECTORY_SEPARATOR.'RSA.php');

//密文

$crypttext = 'v66YKULHFld2JElhm/J9qik2Edr1JHdZIc/k/OesU2GbTX2usXyvF4jGvzvoihrrE8FsfKmllmjsMIjO5fdrS/FD20bYFii4JW3BO3bzshXmz6AEs2DWwG4sK9mNojfOC0IsMoV311X5/JlgUoQXkDy4F5HHpYE9d/xGb0g2XE/hnGSSy2cpQcvQtBlBmixwSckNhsEG92lovlOz8ULwkqG5o7x+qB7P/EMII/WaFAXBJXDXvZX7lmGcOgon6wLhKJLGXorP6BIxOg6LGc6Ux7BAt3i9+0lujNgxIq/sDsl23hsr3yOUpV5C5a813nrHx4HJyd/hBT1UvIUml+eTmJwWCpSfs2cvxIUr0CE57JAZVyXjK13shK3IsZHLPPsm/JcDCrdy0Co/d5uIGJAdzXdsQ56xsju+tlvnA1J6yq2tDIfYK/x6k911A5WXLKYxztD1nq+bTYN3Gv/WFfrzVtgWQBrh06ihS2cwvna0S9EV/YPmhnAjJmrX4trNr9NXQ9xaZaW4lGRg87U5QDV+nQjj1THk0XHFc69N9g2+DsAGyEs9tK6U0ZQ72hJZqZhBCDH1UKw0PLyIhJdxpgPPOWGp8/QVVU2julTeKunvgAAEc3n+GoZfqjsCDi1S6T2MTnjWYWNoFRBhvEZFD/revgpasTOzDQa5NqR1B+mUF70r6uw6MWLJ7cT9Tz3jq+CA';

$aeskey = base64_decode('qZe60QZFxuirub2ey4+7+Q==');

//AES解密,采用ECB模式

$aes = new Crypt_AES(CRYPT_MODE_ECB);

//设置AES密钥

$aes->setKey($aeskey);

//解密AES密文

$plaintext = $aes->decrypt(base64_decode($crypttext));

echo $plaintext;

echo '<hr />';

//AES加密明文

//echo $aes->encrypt($plaintext);

//rsa公钥

$publickey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCffOeIVYut9jW5w1L5uKX4aDvd837a8JhaWm5S8YqNQfgEmfD9T+rDknXLqMT+DXeQAqGo4hBmcbej1aoMzn6hIJHk3/TfTAToNN8fgwDotHewsTCBbVkQWtDTby3GouWToVsRi1i/A0Vfb0+xM8MnF46DdhhrnZrycERBSbyrcwIDAQAB';

//echo base64_decode($publickey);

//rsa签名

$signature = 'XHin4uUFqrKDEhKBD/hQisXLFFSxM6EZCvCPqnWCQJq3uEp3ayxmFuUgVE0Xoh4AIWjIIsOWdnaToL1bXvAFKwjCtXnkaRwUpvWrk+Q0eqwsoAdywsVQDEceG5stas1CkPtrznAIW2eBGXCWspOj+aumEAcPyYDxLhDN646Krzw=';

//echo base64_decode($signature);

$rsa = new Crypt_RSA();

//设置RSA签名模式 CRYPT_RSA_SIGNATURE_PSS or CRYPT_RSA_SIGNATURE_PKCS1

$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);

//var_dump($rsa->createKey());

//生成RSA公钥、私钥

//extract($rsa->createKey());

//使用RSA私钥生成签名

//$rsa->loadKey($privatekey);

//$signature = $rsa->sign($plaintext);

//使用RSA公钥验证签名

echo $plaintext;

$rsa->loadKey(base64_decode($publickey));

echo $rsa->verify($plaintext, base64_decode($signature)) ? 'verified' : 'unverified';

echo '<hr />';

//生成RSA公钥、私钥

//var_dump($rsa->createKey());

extract($rsa->createKey());

//使用RSA私钥加密数据

$rsa->loadKey($privatekey);

$ciphertext = $rsa->encrypt($plaintext);

//使用RSA公钥解密数据

$rsa->loadKey($publickey);

echo $rsa->decrypt($ciphertext);

以上就是本文所述的全部内容了,希望本代码能给大家学习php加密解密能够带来些帮助。

PHP 相关文章推荐
php flush类输出缓冲剖析
Oct 19 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
PHP管理内存函数 memory_get_usage()使用介绍
Sep 23 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
php绘图之生成饼状图的方法
Jan 24 PHP
php 获取文件行数的方法总结
Oct 11 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
在Laravel 的 Blade 模版中实现定义变量
Oct 14 PHP
Thinkphp 3.2框架使用Redis的方法详解
Oct 24 PHP
php查询相似度最高的字符串的方法
Mar 12 #PHP
PHP实现通用alert函数的方法
Mar 11 #PHP
PHP获取ip对应地区和使用网络类型的方法
Mar 11 #PHP
javascript+php实现根据用户时区显示当地时间的方法
Mar 11 #PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 #PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 #PHP
php模拟服务器实现autoindex效果的方法
Mar 10 #PHP
You might like
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
javascript读取RSS数据
2007/01/20 Javascript
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
Nuxt.js实战和配置详解
2019/08/05 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
利用python画一颗心的方法示例
2017/01/31 Python
Python切片工具pillow用法示例
2018/03/30 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
经典C++面试题一
2016/11/06 面试题
如何开发一个JQuery插件
2016/07/28 面试题
学校消防安全制度
2014/01/30 职场文书
高三自我评价
2014/02/01 职场文书
采购求职信
2014/03/17 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
党员作风建设自查报告
2014/10/23 职场文书
法律意见书范本
2015/06/04 职场文书
收入证明申请书
2015/06/12 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
深入理解pytorch库的dockerfile
2022/06/10 Python