学习使用OpenSSL生成并使用RSA密钥对

非对称加密算法也叫<公开密钥算法>,不同于对称加密算法,非对称加密算法加密密钥与解密密钥不是一把密钥、非对称密钥对中公钥是可以公开的。
这种算法如果使用公钥进行加密,则只能使用相应的私钥解密;如使用私钥加密,也只能使用相应的公钥解密。而要想通过公钥推导出私钥几乎是不可能的(这样的算法可以使用一些不可逆函数实现)!
OpenSSL支持RSA、DSA、DH三种不同的非对称加密算法。下面我们将介绍如何使用OpenSSL生成并学习使用RSA密钥对。
RSA非对称加密:

一、生成RSA密钥对(opensll genrsa):
1.语法说明:
usage: genrsa [args] [numbits]
-des             encrypt the generated key with DES in cbc mode(使用des加密算法加密RSA密钥对)
-des3           encrypt the generated key with DES in ede cbc mode (168 bit key) (使用des3加密算法加密RSA密钥对)
-aes128, -aes192, -aes256
encrypt PEM output with cbc aes (使用aes加密算法加密RSA密钥对)
-out file       output the key to 'file(输出密钥对文件)
-passout arg    output file pass phrase source (输出密钥文件的口令)
-f4             use F4 (0x10001) for the E value (使用F4作为公钥的E参数,默认为该选项)
-3              use 3 for the E value (使用3作为公钥的E参数)
-engine e       use engine e, possibly a hardware device. (使用第三方设备生成密钥对)
-rand file:file:...    (手动指定随机数文件)
load the file (or the files in the directory) into
the random number generator
2.案例:
(1)openssl genrsa -out rsakey.pem 2048        
生成一个2048位的密钥对,注:没有对密钥进行加密操作。
(2)openssl genrsa -aes128 -out rsakey.pem -passout pass:000000 2048  
生成一份2048位的密钥对,并对密钥对使用aes算法加密,密钥口令为000000
说明:openssl生成的公钥与私钥默认被存放在一个文件中,当需要提取公钥或私钥时需要使用rsa命令,她可以用来管理密钥文件。

二、管理密钥文件
1.语法说明:
rsa [options] <infile> outfile
where options are
-inform arg     input format - one of DER NET PEM (输入的密钥编码格式,可以是DER、NET、PEM中的一个,默认为PEM)
-outform arg    output format - one of DER NET PEM (输出的密钥编码格式)
-in arg         input file (输入的密钥文件名称)
-sgckey         Use IIS SGC key format (使用SGC格式,一般很少用到)
-passin arg     input file pass phrase source (输入密钥文件时提供的密钥文件口令)
-out arg        output file (输出的密钥文件名)
-passout arg    output file pass phrase source (输出密钥文件时的口令)
-des            encrypt PEM output with cbc des (使用des算法对密钥进行加密)
-des3           encrypt PEM output with ede cbc des using 168 bit key (使用des3算法对密钥进行加密)
-aes128, -aes192, -aes256
encrypt PEM output with cbc aes  (使用aes算法对密钥进行加密)
-text           print the key in text (明文输出密钥参数)
-noout          don't print key out (不输出密钥到文件)
-modulus        print the RSA key modulus (输出RSA密钥模值)
-check          verify key consistency
-pubin          expect a public key in input file (默认输入的是密钥对的私钥,使用pubin输入的是密钥的公钥)
-pubout         output a public key (输出公钥到文件)
-engine e       use engine e, possibly a hardware device. (使用第三方设备)
2.案例:
openssl rsa -in <filename> -out <filename> -pubout -des3
输入一个密钥文件,提起其中的公钥文件,并使用des3算法加密公钥文件。
(注:filename为密钥文件名,实际使用时使用自己的文件名替换,而且实际应用中不会对公钥进行加密,这里仅为演示案例)

三、使用密钥
1.语法说明:
Usage: rsautl [options]
-in file        input file  (输入准备要进行加密或解密的文件)
-out file       output file  (输出加密或解密后的文件)
-inkey file     input key  (输入密钥文件)
-keyform arg    private key format - default PEM (指定密钥文件格式)
-pubin          input is an RSA public (说明输入的是公钥)
-certin         input is a certificate carrying an RSA public key (指明输入的是一个证书)
-ssl            use SSL v2 padding  (数据补齐方式,默认是pkcs)
-raw            use no padding   (数据补齐方式,默认是pkcs)
-pkcs           use PKCS#1 v1.5 padding (default) (数据补齐方式,默认是pkcs)
-oaep           use PKCS#1 OAEP   (数据补齐方式,默认是pkcs)
-sign           sign with private key  (进行数字签名,即使有私钥加密)
-verify         verify with public key  (进行数字签名验证,即使有公钥解密)
-encrypt        encrypt with public key (进行加密操作)
-decrypt        decrypt with private key  (进行解密操作)
-hexdump        hex dump output  (输出十六进制格式)
-engine e       use engine e, possibly a hardware device.
-passin arg    pass phrase source  (口令参数)
注:使用RSA进行加密操作时,要求被加密的数据长度与RSA密钥长度一致,但数据大小是不定的,所以当文件数据小于RSA密钥长度时会采用数据补齐,当被加密的文件大于密钥长度时,会被先切割为等长大小的数据块,进行加密操作。
2.案例:
1.openssl rsautl -in install.log -out bak.log -inkey rsakey.pem -pubin -encrypt
使用我们上面案例中生成的rsakey.pem密钥对<install.log>这个文件进行加密,因为使用了pubin选项,所以使用的是公钥加密。
2.openssl rsautl -in bak.log -out install.log -inkey rsakey.pem -decrypt
使用rsakey.pem密钥中的私钥对<bak.log>文件进行解密。
注:实际应用中很少会使用非对称加密算法对大的文件进行加密操作,而是使用对称加密算法加密文件,然后再使用<非对称加密算法>对<对称算法的密钥>进行加密。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值