RSA加密算法四:openssl中RSA算法使用

RSA使用广泛,最常见的有在openssl中直接生成RSA证书

1、使用openssl生成私钥文件

生成1024位长度RSA私钥证书

命令:openssl genrsa -out test.key 1024

使用cat命令查看证书内容

命令:cat test.key

使用命令查看证书各属性

命令:openssl rsa -text -in test.key

注:如果仔细查看会发现生成的两个素数q和p,表示出来位数多了个0x00,查看下bit数发现多了,这是怎么回事呢?

以128bit证书验证下

证书中的n,p,q都表示为0x00开头数

简单的计算一下 n 的值 看是否是 n = p*q

计算得到的值与证书中的n值相同,说明证书属性表示中的0x00只是填充位,不占长度,数据是从左到右读的

openssl中生成的证书没有具体的格式要求,可以自定义文件后缀甚至没有后缀

只不过测试发现,linux不识别的系统文件会稍大一些

以生成的32位长度证书为例,查看证书中每一项代表那些属性

这就是私钥文件的全部内容,包含的主要属性为:

Private-key: 32bit                私钥长度

Modules: n                             私钥长度就是n长度,f2:57:f2:57一共4*8=32bit

publicExponent: e                公钥e

privateExponent: d              私钥d

Prime1:                                  素数p

Prime2:                                  素数q

Exponent1:                           d mod (p – 1)

Exponent1:                           d mod (q – 1)

Coefficient:                           CRT系数 (q ^-1)mod p  即(q**-1) mod p  //分数取模

前边几项比较好理解和证明,标红的部分需要计算下进行验证

(注:因为分数取模不太好算,这里把结果带入倒推回去,证明q*co%p == 1)

总结一下,每一项属性代表的含义为:

2、使用openssl生成公钥文件

以上是使用openssl生成的私钥文件,下面使用命令生成对应的公钥文件

因为公私钥使用的是相同的 n = p*q 值,或者说生成的是相同的p和q

所以公钥文件生成算是在私钥文件的基础上

命令:openssl rsa -in test.key -pubout -out test_pub.key //使用私钥作为输入计算得到公钥做输出

使用cat命令查看公钥证书内容

公钥证书内容就比较简单了,以32位公钥证书为例,使用openssl命令查看公钥证书属性内容

其中各项意义:

Public-key:                          32bit 公钥长度

Modules: n                         素数pq的乘积,n的长度就是公钥长度

Exponent: e                        公钥e

3、使用openssl公私钥文件对数据进行加解密

首先创建一个文件,写入要加密的明文m

然后使用公钥文件对文件进行加密

命令:openssl rsautl -encrypt -in hello -inkey test_pub.key -pubin -out hello.en

使用cat命令查看加密后的文件时显示的是乱码

使用私钥文件对加密后的文件进行解密

命令:openssl rsautl -decrypt -in hello.en -inkey test.key -out hello.de

解密后文件恢复以前大小,查看解密后的文件内容也是没有问题

加解密过程中用到的所有文件为:

hello:                      明文,待加密的文件

hello.de:                 解密后的文件

hello.en:                 加密后的文件

test.key:                 私钥,用于解密

test_pub.key:       公钥,用于加密

您可能还喜欢...