一、常用加密类型分类

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的更多相关文章

  1. C#开发中常用的加密解密方法

    转载自:https://www.cnblogs.com/bj981/p/11203711.html C#开发中常用的加密解密方法 相信很多人在开发过程中经常会遇到需要对一些重要的信息进行加密处理,今天 ...

  2. password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)

    Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest). 它是一个唯一相应一个消息或文本的固定长度 ...

  3. RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密

    原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptograph ...

  4. C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic

    C#在using System.Security.Cryptography下有 DESCryptoServiceProvider RSACryptoServiceProvider DESCryptoS ...

  5. js rsa sign使用笔记(加密,解密,签名,验签)

    你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...

  6. Java RSA 加密 解密 签名 验签

    原文:http://gaofulai1988.iteye.com/blog/2262802 import java.io.FileInputStream; import java.io.FileOut ...

  7. 转 关于Https协议中的ssl加密解密流程

    关于Https协议中的ssl加密解密流程 2016年09月28日 09:51:15 阅读数:14809 转载自:http://www.cnblogs.com/P_Chou/archive/2010/1 ...

  8. Java常用的加密解密类(对称加密类)

    Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...

  9. RSA加密解密与加签验签

    RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年7月首次在美国公布 ...

随机推荐

  1. 架构师速成7.3-devops为什么非常重要

    evops是一个非常高大上的名字,事实上说的简单点就是开发和运维本身就是一个团队的,要干就一起把事情干好.谁出了问题,站点都不行. 作为一个架构师.必需要devops,并且要知道怎样推行devops. ...

  2. 简述一下 src 与 href 的区别

    href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接. src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置:在请求src资源时会将其指向 ...

  3. oracle 替换字符串中指定位置内容

      1.情景展示 返回服务器的身份证号需要进行加密:只保留前四位和后四位,中间使用*代替,如何实现? 2.解决方案 第一步:查看该表的身份证号的长度有几种类型: 第二步:编写sql 错误方式: 长度为 ...

  4. javascript基础 思维导图2

    来源于:http://www.cnblogs.com/xianyulaodi/p/5886128.html 1.javascript数据类型 2.javascript数组 3.javascript运算 ...

  5. (原)使用tensorboard显示loss

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7416551.html 参考网址: http://blog.csdn.net/jerry81333/ar ...

  6. (原+转)linux安装rtl 8812au驱动

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6806917.html 参考网址: http://www.linuxdiyf.com/viewartic ...

  7. GO语言中的几个关键思想

    GO语言的设计理念与C++,Java,Python之流大相径庭. 一.没有函数重载 GO语言里面没有函数重载,Java.C#.C++三位大牛都是支持函数重载的,Python虽然不支持函数重载,但是支持 ...

  8. 【RS】Using graded implicit feedback for bayesian personalized ranking - 使用分级隐式反馈来进行贝叶斯个性化排序

    [论文标题]Using graded implicit feedback for bayesian personalized ranking (RecSys '14  recsys.ACM ) [论文 ...

  9. 怎样看待IT界业务,技术,管理的各自比重

    怎样看待IT界业务,技术,管理的各自比重   技术是根本,业务是个人能力的体现,管理一般随意,追求简单,眼光向IBM等有优秀管理经验的大公司看齐   重点从个人的喜好.性格方面来考虑分配比重,可以加上 ...

  10. STDIN_FILENO的作用及与stdin 的区别

    1.STDIN_FILENO的作用 STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用 ...