一、常用加密类型分类

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. WEB打印控件Lodop使用体会

                    控件的使用方法,作者都已经有详细的使用说明供使用者参考. 但是对于打印表格,确实出现一点小问题,如果表格是自然高度,也就是只设置了table的高度,此时是可以正常显示的 ...

  2. [转]Spring MVC之@RequestMapping 详解

    前段时间项目中用到了REST风格来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为application/json, ...

  3. tpcc-mysql 系列二:进行TPCC测试

    1:开始测试 tpcc_start -h server_host -P port -d database_name -u mysql_user \ -p mysql_password -w wareh ...

  4. Java反射机制的使用(全)

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6566957.html  一:反射是什么 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有 ...

  5. wkhtmltopdf错误解决办法

    Odoo/openerp 打印报表时,无法输出PDF格式,提示下面的错误Unable to find Wkhtmltopdf on this system. The report will be sh ...

  6. Android内存分析命令(转)

    一.概述 1.1 内存指标概念 Item 全称 含义 等价 USS Unique Set Size 物理内存 进程独占的内存 PSS Proportional Set Size 物理内存 PSS= U ...

  7. Solidworks 2016中导出URDF文件

    安装SolidWorks to URDF exporter插件 下载SolidWorks to URDF Exporter插件后按照网站上的步骤进行安装(目前该插件已经在Win 7 64位系统+Sol ...

  8. ysql怎么处理百分数? “%”

    )将百分数转化为小数,再以浮点数数据类型float输入 )设置字段类型为varchar数据类型,将百分数输入为文本数据,需要计算或提取出来的时候,再转化为数值类型 //转换数据类型

  9. checkbox 多选框 :jquery之全选、全不选、反选

    javascriptjqueryselectAll [html] view plaincopy   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

  10. 1768:最大子矩阵(NOIP2014初赛最后一题)

    1768:最大子矩阵 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如 ...