OpenSSL命令---pkeyutl

用途:

本命令能够测试所支持的密钥算法的性能。

用法:

openssl rsautl [-in file] [-out file] [-sigfile file] [-inkey file] [-passin arg] [-keyform PEM|DER] [-peerkey file] 
[-peerform PEM|DER] [-pubin] [-certin] [-rev] [-sign] [-verify] [-verifyrecover ] [-encrypt] [-decrypt] [-derive]
[-pkeyopt opt:value] [-asn1parse] [-engine e] 


选项说明:

-in filename:需要处理的文件,默认为标准输入。

-out filename:指定输出文件名,默认为标准输出。

-sigfile file:签名文件的保存位置,默认为标准输入。

-inkey file:指定我们的私有密钥文件,格式必须是RSA私有密钥文件。

-passin arg:指定私钥包含口令存放方式。比如用户将私钥的保护口令写入一个文件,采用此选项指定此文件,可以免去用户输入口令的操作。比如用户将口令写入文件“pwd.txt”,输入的参数为:-passin file:pwd.txt

-keyform PEM|DER|NET:证书私钥的格式。

-peerkey file:对方的证书文件,用于证书引出(一致性)操作。

-peerform PEM|DER:对方的证书格式,一般为PEMDERENGINE

-pubin:表明我们输入的是一个公钥文件,默认输入为私钥文件。

-certin:表明我们输入的是一个证书文件。

-rev:数据是否倒序。它主要用于一些库需要小端处理数据。

-sign:给输入的数据签名。需要我们的私有密钥文件。

-verify:对输入的数据进行验证。

-verifyrecover:验证输入的数据并输出转换后的数据内容。

-encrypt:用我们的公共密钥对输入的数据进行加密。

-decrypt:用RSA的私有密钥对输入的数据进行解密。

-derive:用对方的证书得到一个共同的密钥。

-pkeyopt opt:value:公钥参数选项。

-asn1parse:对输出的数据进行ASN1分析。该指令一般和-verify一起用的时候威力大。

-hexdump:用十六进制输出数据。

-engine e:硬件引擎。

注意:

该命令的操作和选项根据密钥算法的改变而改变。

相对应的密钥算法如下:

RSA算法:

RSA算法支持加密、解密、签名、验证签名以及验证恢复操作。一些填充模式仅仅支持这些操作中的一部分。

B<rsa_padding_mode:mode>

RSA中的参数rsa_padding_mode:mode设置RSA的填充模式,支持的填充模式有:用PKCS#1来设置PKCS#1填充模式,用sslv23来设置SSLv23填充模式,用none来设置no填充模式,用oaep来设置OAEP填充模式,用x931来设置X9.31填充模式以及用pss来设置PSS

PKCS#1来说,没有计算消息摘要,并用签名或验证来代替DigestInfo结构。如果一个摘要值被设置并用了DigestInfo结构,则它的长度必须与摘要算法的长度一致。

OAEP填充模式仅仅支持加密、解密操作。

X9.31填充模式来说,一个摘要算法被设置,并将它用于格式块数据,否则第一个字节必须要用X9.31摘要ID。它支持签名、验证签名以及验证恢复操作。

PSS填充模式仅仅支持签名和验证,必须指定摘要算法。

B<rsa_pss_saltlen:len>

B<pss>模式来说,它必须要指定填充长度值。它支持两个值:-1设置填充字节为摘要字节。当签名的时候,-2表示为填充字节为最大的可允许的字节数。当验证的时候,-2表示填充字节由块结构体来决定。

DSA 算法:

DSA算法它仅仅支持签名和验证签名操作。对摘要命令来说,目前它没有更多的附加选项。它仅仅支持sha1摘要,摘要算法还要是默认的。

DH算法:

DH算法仅仅支持密钥引出操作。没有相对应的附加选项。

EC算法:

它支持签名、验证以及密钥引出操作。签名和验证用ECDSA算法,密钥引出用ECDH算法。对摘要命令来说,目前它没有更多的附加选项。它仅仅支持sha1摘要,摘要算法还要是默认的。

实例:

用一个私钥对数据进行签名:

openssl pkeyutl -sign -in file -inkey key.pem -out sig


恢复签名数据(用RSA密钥):

openssl pkeyutl -verifyrecover -in sig -inkey key.pem


DSA算法来验证签名:

openssl pkeyutl -verify -in file -sigfile sig -inkey key.pem


对一个消息的摘要值进行签名(仅仅支持RSA):

openssl pkeyutl -sign -in file -inkey key.pem -out sig -pkeyopt digest:sha256


引出一个共享的密钥:

openssl pkeyutl -derive -inkey key.pem -peerkey pubkey.pem -out secret

你可能感兴趣的:(OpenSSL,pkeyutl,测试所支持的密钥算法的性能)