支付接口中常用的加密解密以及验签rsa,md5,sha
一、常用加密类型分类
1、对称加密:采用单钥对信息进行加密和解密,即同一个秘钥既可以对信息进行加密,也可以进行解密。此类型称之为对称加密。特点速度快,常用于对大量数据信息或文件加密时使用。常用例子:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES。
2、非对称加密:采用公钥和私钥双钥形式对信息进行加密和解密,其中公钥和私钥是成对存在的,即使用公钥对信息加密后的密文只用使用其相应的私钥才可以进行解密,反之也毅然。相对对称加密而言叫做非对称加密。安全性非常好,但加密和解密耗时较长,比较适用于小数据量加密解密。常用例子:数字签名、RSA。
加密介质 公钥私钥对或者证书
公钥加密 私钥解密
私钥签名 公钥验签
公钥私钥
一般格式是.pem的
公钥内容(注意格式不能变)
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmA6wtOBV6O+zwfteu9fKrF1iA
H1q28yMiWDsb2iScRG3JZJWsDz+hVP9Qp7w3Bzqkt0PaC+XNCFVGksqEXZ0lQGgQ
vz4626ibXRt2eLOAgKIrUUbVTccQJhGhAOqFlPSgxdWx/B1cSRp73Lt89WfNISh/
/A81649guFe3PII2wwIDAQAB
-----END PUBLIC KEY-----
私钥内容
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCmA6wtOBV6O+zwfteu9fKrF1iAH1q28yMiWDsb2iScRG3JZJWs
Dz+hVP9Qp7w3Bzqkt0PaC+XNCFVGksqEXZ0lQGgQvz4626ibXRt2eLOAgKIrUUbV
TccQJhGhAOqFlPSgxdWx/B1cSRp73Lt89WfNISh//A81649guFe3PII2wwIDAQAB
AoGAOggcnq31LAZYm/Tq9jj5O/9sK1VKg5tYU8Ad4W2O0KVG71hezYeDCaVJnmsT
6vR29m8to8H28YYRMRtM+ZozvOp1Tk6t+Ng+fcFt8I/bzb+ncq/gznm01gOZ0ihp
zljIhsmH4v7Cnp5/WNkdbrwR0XAXqgIGcMQhENCvQy5WeTECQQDa0XCgC0iTeL5V
MhR4SuZRxHACs7iDuoppDWsu0VgPS+mVrO8Fb2574aR/8y8q5NwJ5XZpG3p+Iie7
CNipZtnZAkEAwjlGbFLEFWT5/DzQFdZlx7A8YbM8UYEnxA7t7nt730UcDML3QPNO
3QMe8Srdrm9B7eRl75t0atjhOgIF26U3+wJBAIVX9hsBZUPA47PFJeY8NmiDnYJ4
BKv5hBkKfVN1bQU9TGXSkYGtaxWA5p62EftApbo+I89fWGD+7VkzxdxNedkCQATh
iZqJTfI3smybXqNd2vr0u9+8sGRf+Y7czS/0HH3U78qGT85rDu1Q+cMXz7BljWOc
HM+zuW5B+w8JI/qMIWcCQDEB/MsM4THgEQIuHStNJw2knA2ah3kQi6jESMQbGflK
YKJlRNwrz+FfwIWQAo1XVf9IdmNjVsDXXosQKInIPZo=
-----END RSA PRIVATE KEY-----
证书规范
证书也是用加密解密算法,只不过多了一些认证参数,比如国家地区等
x509,公钥证书,只有公钥。
p7,签名或加密。可以往里面塞x509,同时没有签名或加密内容。
p12,含有私钥,同时可以有公钥,有口令保护。
p7的作用就是电子信封。
X509是基本规范
P7和P12是两个实现规范,P7是数字信封,P12是带有私钥的证书规范。
x509是数字证书的规范,P7和P12是两种封装形式。比如说同样的电影,有的是avi格式,有的是mpg,大概就这个意思。
P7一般是把证书分成两个文件,一个公钥一个私钥,有PEM和DER两种编码方式。PEM比较多见,就是纯文本的,P7一般是分发公钥用,看到的就是一串可见字符串,扩展名经常是.crt,.cer,.key等。DER是二进制编码。
P12是把证书压成一个文件,.pfx。主要是考虑分发证书,私钥是要绝对保密的,不能随便以文本方式散播。所以P7格式不适合分发。.pfx中可以加密码保护,所以相对安全些。
在实践中要中,用户证书都是放在USBKey中分发,服务器证书经常还是以文件方式分发。服务器证书和用户证书,都是X509证书,就是里面的属性有区别。
X509 是证书规范
PKCS#7 是消息语法 (常用于数字签名与加密)
PKCS#12 个人消息交换与打包语法 (如.PFX .P12)打包成带公钥与私钥
看着有点费劲。。只需要记住x509就是个公钥,pkcs12就是私钥,和私钥不同的是这个私钥是加密的,需要密码才能获取到私钥内容
总结以上证书和密钥都可以对数据进行加密解密以及验签,只是使用的方式不同而已。。。
公私钥的生成
(也可以在linux用openssl命令生成)
//生成密钥 $config = array(
"digest_alg" => "sha512",
"private_key_bits" =>2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
); //创建密钥对
$res = openssl_pkey_new($config);
//生成私钥
openssl_pkey_export($res,$priKey);
//生成公钥
$pubKey = openssl_pkey_get_details($res)['key']; file_put_contents('private.key',$priKey);
file_put_contents('public.key',$pubKey);
证书的生成
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com"
); $config = array(
"digest_alg" => "sha512",
"private_key_bits" =>2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
); //创建密钥对
$res = openssl_pkey_new($config); //证书
$csr = openssl_csr_new($dn,$res); //证书签名
$usercert = openssl_csr_sign($csr, null, $res, 365); //导出证书公钥
openssl_x509_export_to_file($usercert,'csr.public.cert');
//导出证书私钥
openssl_pkcs12_export_to_file($usercert,'csr.private.pfx',$res,'123');
rsa的公私钥加密解密
//公钥加密
//$pubKey = file_get_contents('public.key');
//返回资源型的
$pubKey = openssl_pkey_get_public(file_get_contents('public.key'));
openssl_public_encrypt('123456',$crypted,$pubKey,OPENSSL_PKCS1_PADDING);
base64_encode($crypted);
//私钥解密
//$priKey = file_get_contents('private.key');
//返回资源型的
$priKey = openssl_pkey_get_private(file_get_contents('private.key'));
$crypted = base64_decode($crypted);
openssl_private_decrypt($crypted,$decrypted,$priKey,OPENSSL_PKCS1_PADDING);
//参数的意义: 密文数据, 加密解密后的数据,密钥,加密解密的填充
证书的加密解密
//加密
$pubKey = file_get_contents('csr.public.cert'); $pubKey = openssl_x509_read($pubKey); openssl_public_encrypt('1234',$crypted,$pubKey,OPENSSL_PKCS1_PADDING);
//参数的意义: 密文数据, 加密解密后的数据,密钥,加密解密的填充
$data = base64_encode($crypted); //解密
$data = base64_decode($data); openssl_pkcs12_read(file_get_contents('csr.private.pfx'),$priKey,'123'); openssl_private_decrypt($data,$decrypt,$priKey['pkey'],OPENSSL_PKCS1_PADDING);
//参数的意义: 密文数据, 加密解密后的数据,密钥,加密解密的填充
签名以及验签(证书以及密钥一样的)
//签名
openssl_sign($crypted, $sign, $priKey, OPENSSL_ALGO_SHA1); //验签
$res = openssl_verify($crypted, $sign, $pubKey,OPENSSL_ALGO_SHA1);
另一种验签MD5或者sha1
//对请求的字符串进行加密 当做签名 发送过去
$username = 'liudehua';
$age = 23;
$stamp = time(); $str = ['username'=>$username,'age'=>$age,'stamp'=>$stamp]; //字典排序
ksort($str); $str = http_build_query($str); $sign = md5($str); $str .='&sign='.$sign; echo $str; //接受到数据后开始进行验签 $age = $_GET['age']; $stamp = $_GET['stamp']; $username = $_GET['username']; $sign = $_GET['sign']; $str = ['age'=>$age,'stamp'=>$stamp,'username'=>$username]; ksort($str); $str = http_build_query($str); $check_sign = md5($str); echo $sign;
echo '<br>'; echo $check_sign;
转: http://lampol-blog.com/detail/aid/NzQ5NjhEVEJpcU9CV3hoRXRGZ1RxdmxmUFQ1bWNhcURrWFlGZHp6cQ%3D%3D
相关 : https://www.cnblogs.com/fps2tao/p/8685294.html
支付接口中常用的加密解密以及验签rsa,md5,sha的更多相关文章
- C#开发中常用的加密解密方法
转载自:https://www.cnblogs.com/bj981/p/11203711.html C#开发中常用的加密解密方法 相信很多人在开发过程中经常会遇到需要对一些重要的信息进行加密处理,今天 ...
- password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)
Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest). 它是一个唯一相应一个消息或文本的固定长度 ...
- RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptograph ...
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic
C#在using System.Security.Cryptography下有 DESCryptoServiceProvider RSACryptoServiceProvider DESCryptoS ...
- js rsa sign使用笔记(加密,解密,签名,验签)
你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...
- Java RSA 加密 解密 签名 验签
原文:http://gaofulai1988.iteye.com/blog/2262802 import java.io.FileInputStream; import java.io.FileOut ...
- 转 关于Https协议中的ssl加密解密流程
关于Https协议中的ssl加密解密流程 2016年09月28日 09:51:15 阅读数:14809 转载自:http://www.cnblogs.com/P_Chou/archive/2010/1 ...
- Java常用的加密解密类(对称加密类)
Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...
- RSA加密解密与加签验签
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年7月首次在美国公布 ...
随机推荐
- Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'系列三:重置主从同步
1:停止slave服务器的主从同步 stop slave; 2:对Master数据库加锁 flush tables with read lock; 3:备份Master上的数据 mysqldump - ...
- Run Test Case on Spark
今天有哥们问到怎样对Spark进行单元測试.如今将Sbt的測试方法写出来,例如以下: 对Spark的test case进行測试的时候能够用sbt的test命令: 一.測试所有t ...
- C#/Asp.Net 获取各种Url的方法
比如有:http://localhost:60527/WebSite1test/Default2.aspx?QueryString1=1&QueryString2=2 Response.Wri ...
- cocos2d-js Shader系列2:在cc.Sprite上使用Shader(黑白、灰度、造旧效果)
在Sprite中使用Shader做特殊的颜色处理比较简单,只需要把Shader程序绑定到Sprite上即可: sprite.shaderProgram = alphaTestShader; Cocos ...
- Selenium Page object Pattern usage
使用Selenium的framework,大家免不了要使用他的page object pattern来开发适合自己的framework,原因很简单,page object 可以将测试的对象抽象成一个个 ...
- visual studio运行时库MT、MTd、MD、MDd的研究
在开发window程序是经常会遇到编译好好的程序拿到另一台机器上面无法运行的情况,这一般是由于另一台机器上面没有安装响应的运行时库导致的,那么这个与编译选项MT.MTd.MD.MDd有什么关系呢?这是 ...
- JVM常见面试题
1. 内存模型以及分区,需要详细到每个区放什么. 栈区: 栈分为java虚拟机栈和本地方法栈 重点是Java虚拟机栈,它是线程私有的,生命周期与线程相同. 每个方法执行都会创建一个栈帧,用于存放局部变 ...
- RHEL7 MariaDB测试
MariaDB安装及启动: yum groupinstall mariadb 启动mariadb systemctl restart mariadb systemctl enable mariadb ...
- 转: 在Ogre中使用Havok物理引擎(源码)
作者:CYM 众所周知Ogre则是评价很高的一款图形渲染引擎,Havok则是世界一流的物理引擎,今天花了点时间将两者结合在了一块,做了个Demo 由于国内对Havok的研究似乎很少,网上也找不到多少资 ...
- windows用户态程序的Dump
熟悉Linux的开发人员都知道,在Linux下开发程序,如果程序崩溃了,可以通过配置Core Dump,来让程序崩溃的瞬间产生一个Dump文件,然后通过dump文件来调试程序为什么崩溃.但是windo ...