RSA 汇总

时间:2022-05-21 06:34:48

最近工作中遇到了RSA,这个,以前只是粗略的看了一下,结果,实际使用的时候,各种眼花缭乱啊。现在整理一下RSA有哪些相关知识。

1. RSA算法本身。算法本身的内容实际上是在pkcs#1的标准里面说明的。 在我博客里面记录:https://www.cnblogs.com/yxzamy/p/8961561.html

2. RSA具体使用的标准:PKCS。在我博客里面记录: https://www.cnblogs.com/yxzamy/p/9001179.html

3. RSA在编程语言中的使用。

RSA Laboratories' Public Key Cryptography Standard (PKCS)

RSA整体流程,以及对应的概念。

1. 首先需要密钥,包括公钥和私钥。

这部分牵扯到算法的概念,密钥产生过程,密钥结构,具体标准这pkcs#1中定义,实际存储结构,有多种,在pkcs#7和pkcs#8中定义。

这里存储结构都是一样的,但是,实际存储的时候还是分多种文件格式的,比如pem或者der,一个用文本存储,一个二进制存储,但是,如果读取到可读到结构之后,是一样的。也就是,同样的数据结构,但是,文件结构是不一样的。

相关概念有:

公钥/私钥/module/密钥长度

密钥文件结构:pem/der/TLV

密钥存储结构结构:pem/der/ASN.1

2. 加密解密过程

首先,RSA算法中,是针对数字进行加密的,所有,首先所有字符串加密之前要转化成数字,这个过程中标准中被称为encoding,并不是简单的取其二进制编码,而是要添加一些信息的

pkcs#1中有两种算法:RSAES-OAEP  RSAES-PKCS1-v1_5

加密解密的信息是有长度限制的 ,message最大长度分别是mLen <= k - 2hLen - 2,mLen <= k - 11,可是只密钥的模长度。hLen是hash操作的长度,所以,RSAES-OAEP在encoding的时候,是与hash函数有关的。

输出数据的长度都是K,也就是一个定长数据。

之后,整理好了的字符串,取二进制编码,利用RSA算法加密,之后,加密后的二进制编码转化成字符串返回。

整个定义都在pkcs#1中