二、支付安全(证书秘钥签名)

news/2024/11/17 7:26:08/

目录

  • 二、支付安全(证书/秘钥/签名)
    • 1、信息安全的基础 - 机密性
    • 2、对称加密和非对称加密
    • 3、身份认证
    • 4、摘要算法(Digest Algorithm)
    • 5、数字签名
    • 6、数字证书
    • 7、微信APIv3证书
    • 8、API密钥和APIv3密钥
    • 9、其余思考
  • 补充点
    • 算法题:神秘代码
  • 其他说明
  • 写在后面

二、支付安全(证书/秘钥/签名)

1、信息安全的基础 - 机密性

明文: 加密前的消息叫“明文”(plain text)

密文: 加密后的文本叫“密文”(cipher text)

密钥: 只有掌握特殊“钥匙”的人,才能对加密的文本进行解密,这里的“钥匙”就叫做“密钥”(key) “密钥”就是一个字符串,度量单位是“位”(bit),比如,密钥长度是 128,就是 16 字节的二进制串

加密: 实现机密性最常用的手段是“加密”(encrypt)按照密钥的使用方式,加密可以分为两大类:对称加密和非对称加密。

解密: 使用密钥还原明文的过程叫“解密”(decrypt)

加密算法: 加密解密的操作过程就是“加密算法”

所有的加密算法都是公开的,而算法使用的“密钥”则必须保密

2、对称加密和非对称加密

对称加密

特点:只使用一个密钥,密钥必须保密,常用的有 AES算法

优点:运算速度快

缺点:秘钥需要信息交换的双方共享,一旦被窃取,消息会被破解,无法做到安全的密钥交换

非对称加密

特点:使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,常用的有 RSA

优点:黑客获取公钥无法破解密文,解决了密钥交换的问题

缺点:运算速度非常慢

混合加密

实际场景中把对称加密和非对称加密结合起来使用。

3、身份认证

公钥加密,私钥解密的作用是加密信息

私钥加密,公钥解密的作用是身份认证

4、摘要算法(Digest Algorithm)

摘要算法就是我们常说的散列函数、哈希函数(Hash Function),它能够把任意长度的数据“压缩”成

固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹”。

作用

保证信息的完整性

特性

不可逆:只有算法,没有秘钥,只能加密,不能解密

难题友好性:想要破解,只能暴力枚举

发散性:只要对原文进行一点点改动,摘要就会发生剧烈变化

抗碰撞性:原文不同,计算后的摘要也要不同

常见摘要算法

MD5、SHA1、SHA2(SHA224、SHA256、SHA384)

MD5、SHA1已经被证明不具有 抗碰撞性

5、数字签名

数字签名是使用私钥对摘要加密生成签名,需要由公钥将签名解密后进行验证,实现身份认证和不可否认

签名和验证签名的流程

image-20220531005421740

6、数字证书

数字证书解决“公钥的信任”问题,可以防止黑客伪造公钥。

不能直接分发公钥,公钥的分发必须使用数字证书,数字证书由CA颁发

https协议中的数字证书:

image-20220531005442552

7、微信APIv3证书

商户证书

商户API证书是指由商户申请的,包含商户的商户号、公司名称、公钥信息的证书。

商户证书在商户后台申请:点击这里

image-20220531005451697

平台证书(微信支付平台):

微信支付平台证书是指由微信支付 负责申请的,包含微信支付平台标识、公钥信息的证书。商户可以使

用平台证书中的公钥进行验签。

平台证书的获取:点击这里

image-20220531005503380

8、API密钥和APIv3密钥

都是对称加密需要使用的加密和解密密钥,一定要保管好,不能泄露。

API密钥对应V2版本的API

APIv3密钥对应V3版本的API

9、其余思考

个人理解:

  • 公钥和私钥的产生是为了信息传递的安全性。

    写信人用收信人的公钥加密信件即可

    缺点:不具有完整性

  • 信息摘要算法的产生是为了保证信息的完整性。

    写信人寄信前前附上信件的摘要即可即可,收件人只需要验证信件摘要是否改变,即可确定信件完整性

    缺点:不具有机密性,黑客可以拦截后修改原文和摘要

  • 结合以上两点可以确保信息不会被截后修改原文和摘要

    写信人寄信前前附上被自己私钥加密后信件的摘要(称为签名),收信人用写信人的公钥解密签名后,再和原文的摘要比对。(整个流程称为验签)

    缺点:写信人可以被冒充,也就是公钥信任问题

  • 数字证书可以解决是公钥信任问题

    证书根据摘要算法生成证书的摘要,用证书的私钥加密摘要,生成证书签名,签名和证书一起发布(称为数字证书)。

    寄信人写信时附上数字证书即可证明自己的身份,收信人收信后先验签数字证书。验签通过后,从证书中取出寄件人是公钥,再用寄件人是公钥对信件进行验签。

以上举例中,寄件人为 https 网站,收件人为客户端浏览器。

发布私钥保留公钥会怎么样?

理论上,KeyGen得到的是(e,d,n),(e,d)哪个作为公钥都是可以的,你公开的那个就是公钥,保留的那个就是私钥。
但实现中出于性能考虑,e是选好的e=65537(一开始是e=3,但是有小指数攻击的问题),这样e就只能作为公钥了。

也证实了: 公钥加密私钥解密是的作用是传递信息,私钥加密公钥解密是的作用是身份认证。

补充点

之前同学问过我这样一道题,涉及加密解密,有兴趣的同学可以试试

2022年3月19日晚20:00 美团面试题 第二题 (已AC)

算法题:神秘代码

时间限制: 3000MS
内存限制: 589824KB

题目描述:

小团在网上冲浪的时候发现了一些神秘代码。经过一段时间的研究,小团发现了这些代码的加密规则。
对于个长度为n的字符串s, 其对应的加密字符串t的第个字符是s中的第n/2个字符(向上取整),而中第二到第n个字符则刚好对应s删去第n/2个字符(向上取整)后所得字符串的加密字符串。这个规则也可以用如下流程描述:将t初始化为一个空串,不断地从s中取出第n/2个字符(向上取整)并将其拼到的后面,当s为空时即是所求的加密字符串。为了加快破解流程,小团希望你能设计个命令行工具来帮他进行加密和解密的操作。

输入描述

第一行有两个正整数n,t(1<=n<= 100000,1<=t<=2),代表字符串的
长度以及操作(1为加密,2为解密)

第二行有一个长度为n的字符串s,仅由小写英文字母组成,代表需要进行操作的字符串。

输出描述

输出一个长度为n的字符串,代表操作的结果。

样例输入

6 2
hahaha

样例输出

hhhaaa

提示:

如我们需要加密 hhhaaa 这个串,则进行的步骤如下表:

步骤串s串t备注
1hhhaaa原串
2hhaaah6除以2向取整是3,取s中的第3个字符卜拼到t的末尾
3hhaaha5除以2向上取事是3,取s中的第3个字符西拼到t的末尾
4haahah4除以2向上收整是2,取s中的第2个字符h拼到t的末尾
5hahaha3除以2向上取整是2,取s中的第2个字符a拼到t的末尾
6ahahah2除以2向上取整是1,取s中的第1个字管h拼到t的末尾
7hahaha1 除以2向上取整是1,取s中的第1个字符a拼到t的末尾

因此 hhhaaa 的加密结果是 hahaha ,反之即 hahaha 的解密结果是 hhhaa

【代码】

public class Main{public static String main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int t = sc.nextInt();String str = sc.next();return t == 1 ? encryption(n, str) : decrypt(n, str);}// 加密public static String encryption(int n, String str) {StringBuilder builder = new StringBuilder(str);StringBuilder res = new StringBuilder();while (builder.length() > 0) {res.append(builder.charAt((builder.length() + 1) / 2 - 1));builder.deleteCharAt((builder.length() + 1) / 2 - 1);}return res.toString();}// 解密public static String decrypt(int n, String str) {StringBuilder builder = new StringBuilder(str);StringBuilder res = new StringBuilder();while (builder.length() > 0) {res.insert(res.length() / 2, builder.charAt(builder.length() - 1));// 在指定的位置10,插入指定的字符串builder.deleteCharAt(builder.length() - 1);}return res.toString();}
}

其他说明

本系列跟学【Java Spring Boot 实战项目】Java在线支付实战-微信支付/支付宝支付,非全部原创内容。但是会根据自己的思考或者理解加一些内容或细节。

写在后面

欢迎关注,进期会经常发一些工作中遇到的问题,或者需要学习的知识。

需要其他算法题也可以私信我哦!

欢迎随时留言讨论,知无不答!


http://www.ppmy.cn/news/433231.html

相关文章

数字证书是什么,里面都包含那些内容

1&#xff09;概念&#xff1a; 数字证书是数字证书在一个身份和该身份的持有者所拥有的公/私钥对之间建立了一种联系&#xff0c;由认证中心&#xff08;CA&#xff09;或者认证中心的下级认证中心颁发的。根证书是认证中心与用户建立信任关系的基础。在用户使用数字证书之前必…

数字证书、签名到底是什么?这篇文章讲得太好了

前段时间整理了关于数字证书和数字签名的一些内容&#xff0c;今天整理一下发出来。 我们都知道 HTTP 协议都是明文传输内容&#xff0c;为了保证数据传输的安全&#xff0c;HTTPS 协议就应运而生了&#xff0c;但它其实并不是一个全新的协议&#xff0c;而是HTTP 协议基本之上…

网络安全--数字签名/数字证书

对称加密: 未加密的信息秘钥 --> 加密的黑盒子 --> 加密后的信息 加密后的信息秘钥 --> 解密的黑盒子 --> 未加密的信息 非对称加密: 未加密的信息公钥 --> 加密的黑盒子 --> 加密后的信息 加密后的信息私钥 --> 解密的黑盒子 --> 未加密的信息 既…

网站上数字证书原理你知道么?

前言&#xff1a;文中首先解释了加密解密的一些基础知识和概念&#xff0c;然后通过一个加密通信过程的例子说明了加密算法的作用&#xff0c;以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释&#xff0c;并讨论一下windows中数字证书的管理&#xff0c;最后演示…

商用密码数字证书合格检测工具

商用密码证书合格检测工具 商用密码应用安全性评估SM2数字证书工具界面如下所示 商用密码应用安全性评估 在商用密码安全性评估中&#xff0c;数字证书合格性检测是一个重要环节。比如身份认证中数字证书的使用的正确、有效、合规&#xff1b;在密码产品如VPN中数字证书的使用…

ssl数字证书有什么优点?为什么需要数字证书?

平时用浏览器访问百度、淘宝&#xff0c;我们会发现URL地址栏上有一个小锁&#xff0c;这个小锁是干嘛的呢?如果点开IE下的小锁内容我们看到一个共同的内容都有“证书”。只有小锁的网站才有证书&#xff0c;一些没有小锁的网站是没有证书的。 那么ssl数字证书有什么优点呢?…

数字证书的可信

PKI公钥基础设施通过建设信任根&#xff0c;结合数字证书&#xff0c;实现了可信身份。通过数字证书技术&#xff0c;可以实现数字签名、数据加密。 数字证书的可信 数字证书的可信基于可信根对用户身份的核验&#xff0c;确认信息和用户身份匹配&#xff0c;颁发给用户一个数…

深入理解加密、解密、数字签名(签名证书、加密证书)的组成和数字证书

深入理解加密、解密、数字签名和数字证书 随着电子商务的迅速发展&#xff0c;信息安全已成为焦点问题之一&#xff0c;尤其是网上支付和网络银行对信息安全的要求显得更为突出。为了能在因特网上开展安全的电子商务活动&#xff0c;公开密钥基础设施&#xff08; PKI, Public …