使用OpenSSL生成非对称密钥

简介:

 使用OpenSSL生成非对称密钥

 

非对称加密算法也叫<公开密钥算法>,不同于对称加密算法,非对称加密算法加密密钥与解密密钥不是一把密钥、非对称密钥对中公钥是可以公开的。

这种算法如果使用公钥进行加密,则只能使用相应的私钥解密;如使用私钥加密,也只能使用相应的公钥解密。而要想通过公钥推导出私钥几乎是不可能的(这样的算法可以使用一些不可逆函数实现)!

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:111111 2048   

     生成一份2048位的密钥对,并对密钥对使用aes算法加密,密钥口令为111111

说明: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>文件进行解密。

注:实际应用中很少会使用非对称加密算法对大的文件进行加密操作,而是使用对称加密算法加密文件,然后再使用<非对称加密算法>对<对称算法的密钥>进行加密。
















本文转自丁丁历险51CTO博客,原文链接:http://blog.51cto.com/manual/788681 ,如需转载请自行联系原作者



相关文章
|
6月前
|
算法 数据安全/隐私保护 C语言
XXTEA加密算法
XXTEA加密算法
163 0
|
2月前
openssl生成密钥
openssl生成密钥
20 0
|
4月前
|
存储 算法 安全
OpenSSL 使用AES对文件加解密
AES(Advanced Encryption Standard)是一种对称加密算法,它是目前广泛使用的加密算法之一。AES算法是由美国国家标准与技术研究院(NIST)于2001年发布的,它取代了原先的DES(Data Encryption Standard)算法,成为新的标准。AES是一种对称加密算法,意味着加密和解密使用相同的密钥。这就要求密钥的安全性非常重要,因为任何拥有密钥的人都能进行加密和解密操作。其密钥长度,包括128位、192位和256位。不同长度的密钥提供了不同级别的安全性,通常更长的密钥长度意味着更高的安全性。
74 1
OpenSSL 使用AES对文件加解密
|
6月前
|
算法 数据安全/隐私保护
20.2 OpenSSL 非对称RSA加解密算法
RSA算法是一种非对称加密算法,由三位数学家`Rivest`、`Shamir`和`Adleman`共同发明,以他们三人的名字首字母命名。RSA算法的安全性基于大数分解问题,即对于一个非常大的合数,将其分解为两个质数的乘积是非常困难的。OpenSSL库中提供了针对此类算法的支持,但在使用时读者需要自行生成公钥与私钥文件,在开发工具包内有一个`openssl.exe`程序,该程序则是用于生成密钥对的工具,当我们需要使用非对称加密算法时,则可以使用如下命令生成公钥和私钥。
45 0
20.2 OpenSSL 非对称RSA加解密算法
|
6月前
|
算法 搜索推荐 安全
20.3 OpenSSL 对称AES加解密算法
AES算法是一种对称加密算法,全称为高级加密标准(Advanced Encryption Standard)。它是一种分组密码,以`128`比特为一个分组进行加密,其密钥长度可以是`128`比特、`192`比特或`256`比特,因此可以提供不同等级的安全性。该算法采用了替代、置换和混淆等技术,以及多轮加密和密钥扩展等机制,使得其加密效果优秀,安全性高,被广泛应用于各种领域中,如数据加密、文件加密、网络安全等。
70 0
20.3 OpenSSL 对称AES加解密算法
|
9月前
|
存储 算法 安全
5种常用加密算法!
5种常用加密算法!
|
安全 算法 Java
有关密钥的最全总结都在这了
有关密钥的最全总结都在这了
有关密钥的最全总结都在这了
|
算法 架构师 Java
那些常用的加密算法
本文主要讲解一下C#常用的那些加密算法。
那些常用的加密算法
|
机器学习/深度学习 算法 数据安全/隐私保护
一些加密算法
参考文献:https://mp.weixin.qq.com/s?__biz=MzU1MzE3Njg2Mw==&mid=2247485826&idx=1&sn=60126c394a72cd6bfaf31a32bc04dce3&chksm=fbf793f2...
1106 0