(8) openssl rsautl(签名/验证签名/加解密文件)和openssl pkeyutl(文件的非对称加密)

摘要:
Rsautl是rsa的一个工具,相当于rsa和dgst函数集的一部分,可用于生成数字签名、验证数字签名、加密和解密文件。请注意,rsautl和pkeyutl的缺陷是它们默认只能在短文件上运行,否则将报告类似于以下内容的错误消息。这里,仅给出了短文件的非对称加密和解密的示例。

rsautl是rsa的工具,相当于rsa、dgst的部分功能集合,可用于生成数字签名、验证数字签名、加密和解密文件

pkeyutl是非对称加密的通用工具,大体上和rsautl的用法差不多,所以此处只解释rsautl。

openssl rsautl  [-in file] [-out file] [-inkey file] [-pubin] [-certin] [-passin arg] [-sign] [-verify] [-encrypt] [-decrypt] [-hexdump]
 
openssl pkeyutl [-in file] [-out file] [-sigfile file] [-inkey file] [-passin arg] [-pubin] [-certin] [-sign] [-verify] [-encrypt] [-decrypt] [-hexdump]

共同的选项说明:
-in file:       指定输入文件
-out file:      指定输出文件
-inkey file:    指定密钥输入文件,默认是私钥文件,指定了"-pubin"则表示为公钥文件,使用"-certin"则表示为包含公钥的证书文件
-pubin:         指定"-inkey file"的file是公钥文件
-certin:        使用该选项时,表示"-inkey file"的file是包含公钥的证书文件
-passin arg: 传递解密密码。若验证签名时实用的公钥或私钥文件是被加密过的,则需要传递密码来解密
【功能选项:】 -sign: 使用私钥签名,并输出签名结果,注意,该选项需要提供RSA私钥文件 -verify: 使用公钥验证签名文件

-encrypt: 使用公钥加密文件 -decrypt: 使用私钥解密文件
【输出格式选项:】 -hexdump: 以hex方式输出 openssl pkeyutl选项说明: sigfile file: 待验证的签名文件

rsautl命令的用法和rsa、dgst不太一样:

首先,它的前提是已经有非对称密钥,所有的命令操作都用到公钥或私钥来处理

再者,该命令使用-in选项来指定输入文件,而不像dgst一样可以把输入文件放在命令的结尾;

最后,该命令使用的密钥文件、签名文件、证书文件都通过-inkey选项指定,再通过各功能的选项搭配来实现对应的功能。

注意rsautl和pkeyutl的缺陷是默认只能对短小的文件进行操作,否则将报类似如下的错误信息。

140341340976968:error:0406C06E:rsa routines:RSA_padding_add_PKCS1_type_1:data too large for key size:rsa_pk1.c:73:

因为这两个工具签名和验证签名的功能和openssl dgst命令差不多,且自身又有缺陷,所以就不举例说明。此处仅给出对短小文件的非对称加密和解密示例。

(1).使用公钥加密b.txt文件,注意待加密文件b.txt必须是短小文件,且不建议使用-hexdump输出,否则解密时可能超出文件的长度。

[root@docker121 ssl]# openssl genrsa -out private.pem 512
Generating RSA private key, 512 bit long modulus
.....++++++++++++
................++++++++++++
e is 65537 (0x10001)
[root@docker121 ssl]# openssl rsa -in private.pem -pubout -out public.pem
writing RSA key
[root@docker121 ssl]# echo "123456" >> b.txt
[root@docker121 ssl]# openssl rsautl -encrypt -pubin -inkey public.pem -in b.txt -out b_crypt.txt
[root@docker121 ssl]# ll
total 16
-rw-r--r-- 1 root root 64 Oct 4 00:31 b_crypt.txt
-rw-r--r-- 1 root root 7 Oct 4 00:29 b.txt
-rw-r--r-- 1 root root 493 Oct 4 00:29 private.pem
-rw-r--r-- 1 root root 182 Oct 4 00:29 public.pem

[root@docker121 ssl]# cat b_crypt.txt

5.XO0n;(+Eroot@docker121 ssl]# 

(2).使用私钥解密b_crypt.txt文件。

[root@docker121 ssl]# openssl rsautl   -decrypt -inkey private.pem   -in b_crypt.txt   -out b_decrypt.txt
[root@docker121 ssl]# cat b_decrypt.txt
123456

免责声明:文章转载自《(8) openssl rsautl(签名/验证签名/加解密文件)和openssl pkeyutl(文件的非对称加密)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Adobe Auditon使用功能(一):将音频文件切分成多段,并将每段音频分别保存到不同的文件中[转] Oracle数据库维护常用SQL语句集合下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

charles抓包工具的使用:手机抓包设置和安装证书

    一. 设置手机抓包 第一步:在charles里设置允许手机联网的权限,并设置接入接口 在Charles的菜单栏上选择"Proxy"->"Proxy Settings",填入代理端口8888(注意,这个端口不一定填写8888,也可以写别的端口),并且勾上”Enable transparent HTTP proxying”,这样就完成了在Cha...

嵌入式 Linux下编译并使用curl静态库

#x86./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disable-tftp --disable-telnet --disable-largefile --disable-smtp --disable-imap --wi...

升级openssl 支持TLS1.2

升级openssl 支持TLS1.2 支持TLS1.2 背景: 现在许多网站,都要求tls1.2协议以上,像github、 pip3安装包网站https://pip.pypa.io/等。 openssl现有版本不支持。需要升级openssl。 git 底层使用curl库,curl库又调用的libopenssl库。 如果希望git支持tls1.2,需要更新c...

centos7 apache配置ssl支持tlsv1.0 1.1 1.2

centos7 apache配置ssl支持tlsv1.0 1.1 1.2原创93dd大智若愚 最后发布于2017-05-11 17:25:39 阅读数 2162 收藏展开按照阿里云的证书配置如下安装证书: 文件说明: 1. 证书文件214089425050896.pem,包含两段内容,请不要删除任何一段内容。 2. 如果是证书系统创建的CSR,还包含:证书...

彻底理解RSA算法原理

1. 什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法。在了解RSA算法之前,先熟悉下几个术语 根据密钥的使用方法,可以将密码分为对称密码和公钥密码 对称密码:加密和解密使用同一种密钥的方式 公钥密码:加密和解密使用不同的密码的方式,因此公钥密码通常也称为非对称密码。 2. RSA加密 RSA的加密过程可以使用一个通式...

Linux编译安装安Python3.7/3.8出现_ssl模块错误| python运行ssl模块出现ModuleNotFoundError

背景: 今天在Linux上使用paramiko模块的时候,出现了错误:ModuleNotFoundError:No module name '_ssl',但是我的系统是安装了openssl的1.0.1的,查了网络上的信息发现,Python3.7以后的版本,需要openssl1.0.2+,或者Libressl2.6.4+。 按照网络上的方法,安装了opens...