OpenSSL中的dgst、dh、dhparam、enc命令使⽤说明
OpenSSL中的dgst、dh、dhparam、enc命令使⽤说明
dgst
主要⽤于数据摘要、数据签名以及验证签名。
概要
openssl dgst [-digest] [-help] [-c] [-d] [-list] [-hex] [-binary] [-r] [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-sigopt nm:v] [-hmac key] [-fips-fingerprint] [-] [-engine i dgst函数输出⼗六进制的摘要⽂件,默认的摘要算法是sha256,输⼊如下命令查看可选摘要算法
openssl dgst -list
选项说明
-digest ——摘要算法名称
Supported digests:
-blake2b512                -blake2s256                -md4
-md5                      -md5-sha1                  -ripemd
-ripemd160                -rmd160                    -sha1
-sha224                    -sha256                    -sha3-224
-sha3-256                  -sha3-384                  -sha3-512
-sha384                    -sha512                    -sha512-224
-sha512-256                -shake128                  -shake256
-sm3                      -ssl3-md5                  -ssl3-sha1
-whirlpool
-help ——查帮助
-
c ——当设置了-hex,输出结果每两个字符中加⼀个冒号
-d ——打印出BIO调试信息值。
-hex ——以⼗六进输出结果,⼆选⼀
-binary ——以⼆进制输出结果,⼆选⼀
-r —— 以sha1sum的“coreutils”格式输出摘要
-non-fips-allow —— 允许在FIPS模式使⽤⾮FIPS算法
-out filename —— 输出⽂件,默认标准输出
-sign filename —— 使⽤⽂件中的私钥签名
-keyform arg —— 私钥格式,PEM | DER
-passin arg —— 私钥密码
-verify filename ——公钥验签
-
prverify filename ——私钥验签
-signature filename ——签名⽂件
-hmac key ——hmac 秘钥
-non-fips-allow ——允许在FIPS模式使⽤⾮FIPS算法
-fips-fingerprint ——在某些openssl-FIPS中使⽤特殊密钥计算HMAC
-engine id ——指定硬件引擎
file ——输⼊⽂件,不指定则为标准输⼊
注意事项
所有新应⽤程序的选择的摘要算法是SHA1。然⽽其他摘要算法仍然被⼴泛使⽤。
在签名时,dgst将根据私钥的ASN.1信息⾃动确定⽤于签名的算法(RSA,ECC等)。
当验证签名时,它只处理RSA,DSA或ECDSA签名本⾝,⽽不是分析相关数据来识别签名者和相关算法,如x.509,CMS和S / MIME的签名者和算法。
某些签名算法,特别是ECDSA和DSA需要⼀个随机数源。
仅当单个⽂件要签名或验证时,才能使⽤签名和验证选项。
⼗六进制签名⽆法使⽤openssl进⾏验证。使⽤“xxd -r”或类似程序在验证之前将⼗六进制签名转换为⼆进制签名。
在OpenSSL 1.1.0中默认的摘要算法是sha256
⽰例
//计算摘要
openssl dgst -md5 -
openssl dgst -sh1 -c -hex -out md.
//私钥签名
openssl dgst -sha256 -sign privatekey.pem -out signature.
//公钥验签
openssl dgst -sha256 -verify publickey.pem -signature signature.
//私钥签名
openssl dgst -sign rsa_pri.key -keyform PEM -passin pass:123456 -out rsa_sign.
//私钥验签
openssl dgst -prverify rsa_pri.key -keyform PEM -passin pass:123456 -signature rsa_sign.
//公钥验签
openssl dgst -verify rsa_pub.key -keyform PEM -signature rsa_sign.
//hmac
openssl dgst -hmac rsa_pri.key -keyform PEM -passin pass:123456 -sha1 -out rsa.
dh、dhparam
dh是Diffie-Hellman参数管理命令,现已被dhparam替代
dhparam命令⽤于⽣成和管理Diffie-Hellman参数。
概要
openssl dhparam [-help] [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-out filename] [-dsaparam] [-check] [-noout] [-text] [-C] [-2] [-5] [-] [-writerand file] [-engine id] [numbits]
选项说明
-help ——查帮助
-inform DER|PEM ——输⼊⽂件格式,DER或者PEM格式。DER格式采⽤ASN1的DER标准格式。⼀般⽤的多的都是PEM格式,就是base64编码格式。
-outform DER|PEM ——输出⽂件格式,DER或者PEM格式。
-in filename ——读取DH参数的⽂件,默认为标准输⼊。
-out filename ——dh参数输出⽂件,默认为标准输出。
-dsaparam ——如果本选项被设置,那么⽆论输⼊还是输⼊都会当做DSA的参数。它们再被转化成DH
的参数格式。这样⼦产⽣DH参数和DH key都会快很多。会使SSL握
⼿的时间缩短。当然时间是以安全性做牺牲的,所以如果这样⼦最好每次使⽤不同的参数,以免给⼈破掉你的密钥值。如果没有被设置,⼤素数会被作为DH参数的产⽣
器。
-noout ——不打印参数编码的版本信息。
-check ——检查DH密钥参数。
-text ——打印DH参数信息值。
-C ——以C语⾔风格打印信息。
-2、-5 ——指定2或5为发⽣器,默认为2,如果指定这些项,输⼊DH参数⽂件将被忽略,⾃动⽣成DH参数。
-rand file(s) ——随机数产⽣种⼦。
-engine id ——指定硬件引擎。
numbits ——指定素数位数,必须是最后⼀个参数,默认为512。
注意事项
PEM格式的DH密钥参数⽤下⾯的头部和尾部:
-----BEGIN DH PARAMETERS-----
-----END DH PARAMETERS-----
OpenSSL⽬前仅仅⽀持⽼版本的PKCS#3格式的DH,不是最新的X9.42DH。
这个命令操作的是DH参数⽽不是key。
BUGS
应该使⽤其他的命令⽣成和操作DH的key。
⽰例
//⽣成DH参数
openssl dhparam -2 -out dhparam.pem -text 1024
通过vim dhparam.pem可以查看这个⽂件
DH Parameters: (1024 bit)
prime:
00:ca:4a:ac:a4:ad:c3:9f:6c:08:dd:cb:00:bd:79:
47:b9:3e:53:e1:6e:38:2d:fb:47:10:e0:d9:d3:16:
82:b4:dc:33:5f:32:a6:b7:20:b6:1a:f3:1c:67:ec:
5a:ab:3d:cf:42:61:6e:a1:a2:ea:a1:19:55:d8:54:
0c:cd:cc:1d:ea:70:ca:a9:4d:a5:b3:ea:7c:19:54:
40:dc:a8:67:06:57:32:94:96:d9:ec:97:f3:ff:df:
8a:5f:69:7c:9e:a3:02:73:ad:42:7a:c5:b3:3f:10:
5d:e3:11:b2:50:e8:b4:98:1f:a3:c1:46:be:f5:3c:
b5:ee:ec:7e:3e:ba:13:f3:fb
generator: 2 (0x2)
-----BEGIN DH PARAMETERS-----
MIGHAoGBAMpKrKStw59sCN3LAL15R7k+U+FuOC37RxDg2dMWgrTcM18yprcgthrz
HGfsWqs9z0JhbqGi6qEZVdhUDM3MHepwyqlNpbPqfBlUQNyoZwZXMpSW2eyX8//f
il9pfJ6jAnOtQnrFsz8QXeMRslDotJgfo8FGvvU8te7sfj66E/P7AgEC
-----END DH PARAMETERS-----
//检查⽣成的DH参数
openssl dhparam -in dhparam.pem -check
enc
这是⼀个对称加密算法⼯具。能够运⽤多种块密码算法或者流密码算法对数据进⾏加密解密,还可以对明⽂和密⽂进⾏base64的编码和解码。
概要
openssl enc -cipher [-help] [-list] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a] [-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-iter count] [-pbkdf2] [-p] [-P] [-bufsize number] [输⼊如下命令可以查看可选加解密算法:
openssl enc -list
选项说明
-ciphername ——对称算法名称
Supported ciphers:
-aes-128-cbc              -aes-128-cfb              -aes-128-cfb1
-aes-128-cfb8              -aes-128-ctr              -aes-128-ecb
-
aes-128-ofb              -aes-192-cbc              -aes-192-cfb
-aes-192-cfb1              -aes-192-cfb8              -aes-192-ctr
-aes-192-ecb              -aes-192-ofb              -aes-256-cbc
-aes-256-cfb              -aes-256-cfb1              -aes-256-cfb8
-aes-256-ctr              -aes-256-ecb              -aes-256-ofb
-aes128                    -aes128-wrap              -aes192
-aes192-wrap              -aes256                    -aes256-wrap
-aria-128-cbc              -aria-128-cfb              -aria-128-cfb1
-aria-128-cfb8            -aria-128-ctr              -aria-128-ecb
-aria-128-ofb              -aria-192-cbc              -aria-192-cfb
-aria-192-cfb1            -aria-192-cfb8            -aria-192-ctr
-
aria-192-ecb              -aria-192-ofb              -aria-256-cbc
-aria-256-cfb              -aria-256-cfb1            -aria-256-cfb8
-aria-256-ctr              -aria-256-ecb              -aria-256-ofb
-aria128                  -aria192                  -aria256
-bf                        -bf-cbc                    -bf-cfb
-bf-ecb                    -bf-ofb                    -blowfish
-camellia-128-cbc          -camellia-128-cfb          -camellia-128-cfb1
-camellia-128-cfb8        -camellia-128-ctr          -camellia-128-ecb
-camellia-128-ofb          -camellia-192-cbc          -camellia-192-cfb
-camellia-192-cfb1        -camellia-192-cfb8        -camellia-192-ctr
-camellia-192-ecb          -camellia-192-ofb          -camellia-256-cbc
-
camellia-256-cfb          -camellia-256-cfb1        -camellia-256-cfb8
-camellia-256-ctr          -camellia-256-ecb          -camellia-256-ofb
-camellia128              -camellia192              -camellia256
-cast                      -cast-cbc                  -cast5-cbc
-cast5-cfb                -cast5-ecb                -cast5-ofb
-chacha20                  -des                      -des-cbc
-des-cfb                  -des-cfb1                  -des-cfb8
-des-ecb                  -des-ede                  -des-ede-cbc
-des-ede-cfb              -des-ede-ecb              -des-ede-ofb
-des-ede3                  -des-ede3-cbc              -des-ede3-cfb
-des-ede3-cfb1            -des-ede3-cfb8            -des-ede3-ecb
-
des-ede3-ofb              -des-ofb                  -des3
-des3-wrap                -desx                      -desx-cbc
-id-aes128-wrap            -id-aes128-wrap-pad        -id-aes192-wrap
-id-aes192-wrap-pad        -id-aes256-wrap            -id-aes256-wrap-pad
-id-smime-alg-CMS3DESwrap  -rc2                      -rc2-128
-rc2-40                    -rc2-40-cbc                -rc2-64
-rc2-64-cbc                -rc2-cbc                  -rc2-cfb
-rc2-ecb                  -rc2-ofb                  -rc4
-rc4-40                    -seed                      -seed-cbc
-seed-cfb                  -seed-ecb                  -seed-ofb
-sm4                      -sm4-cbc                  -sm4-cfb
-
sm4-ctr                  -sm4-ecb                  -sm4-ofb
-in filename —— 输⼊⽂件
-out filename ——输出⽂件,省略则为标准输出
-pass arg —— ⼝令设置,⽤于没有提供密钥时,采⽤摘要算法从⼝令中⽣成⼀个密钥,如果加密时使⽤了⼝令,则解密也要使⽤⼝令,arg如下所⽰:
-pass pass:"123"      #密码是123
-pass pass:123        #密码是123
-pass evn:VAR        #密码从环境变量VAR中去
-pass       #密码从⽂件p.txt第⼀⾏取,不包括换⾏符,注意DOS格式的^M及回车符。
-pass fd:3            #密码从⽂件描述符3中读
-pass stdin          #标准输⼊123456
-e —— 加密,⼆选⼀
-d —— 解密,⼆选⼀
-a/-base64 —— 加密时设置结果以base64编码,,解密时设置输⼊为base64
-A ——加密时设置结果以base64编码成⼀⾏,解密时设置输⼊为⼀⾏base64
-k password —— ⼝令,已经被-pass代替,⼆选⼀
-kfile filename —— ⼝令⽂件已经被-pass代替,⼆选⼀
-K key —— 加密秘钥,16进制
-iv IV ——初始向量,16进制
-S salt ——指定16进制盐值
-salt ——带有随机盐值⼆选⼀
-nosalt ——不带盐值,已经关闭此选项,⼆选⼀
-z ——是否压缩,需要编译时选择了zlib库
-
md digstname —— 摘要算法,当没有提供密钥时候,⽤于从⼝令中⽣成⼀个密钥,默认md5
-p ——打印出使⽤的salt、⼝令以及初始化向量IV。⼆选⼀
cipher命令-P ——打印出使⽤的salt、⼝令以及初始化向量IV。不做加解密,⼆选⼀
-bufsize number ——缓冲区⼤⼩
-nopad ——⽆填充
-debug ——打印调试信息
-none ——不执⾏加解密
-engine id ——引擎
注意事项
该程序可以通过openssl ciphername或者openssl enc -ciphername 两种⽅式调⽤,但是前⼀种不⽀持引擎加密.
应在配置⽂件中配置提供全新加密算法的引擎(如提供gost89算法的ccgost引擎)。在命令⾏中使⽤-engine选项指定的引擎只能⽤于由配置⽂件中指定的OpenSSL内核或其他引擎⽀持的密码的硬件辅助实现。
当enc命令列出⽀持的加密算法时,也列出了配置⽂件中指定的引擎提供的算法。
如果需要,将提⽰输⼊密钥以获得密钥。
如果从密码派⽣密钥,则应使⽤-salt选项,除⾮您希望与以前版本的OpenSSL和SSLeay兼容。没有-salt选项,可以对密码执⾏有效的字典攻击,并攻击流密码加密数据。
原因是没有slat,相同的密码总是⽣成相同的加密密钥。当slat被使⽤时,加密数据的前⼋个字节被保留给盐:它在加密⽂件时被随机⽣成,并且在被解密时从加密⽂件读取。
⼀些密码没有⼤的密钥,如果不正确使⽤,会带来安全隐患。建议初学者在CBC模式下使⽤强分组密码,如bf或des3。
所有块密码通常使⽤PKCS#5填充也称为标准块填充:这允许执⾏基本的完整性或密码检查。然⽽,由于随机数据通过测试的机会优于256中的1,这不是⼀个⾮常好的测试。
如果禁⽌填充,则输⼊数据必须是密码块长度的倍数。
所有RC2密码具有相同的密钥和有效的密钥长度。
Blowfish和RC5算法使⽤128位密钥。
⽰例
//将⼀个⼆进制⽂件转换为base64编码的⽂件
openssl base64 -in file.bin -out file.b64
//将这个base64编码的⽂件解码原来的⼆进制⽂件
openssl base64 -d -in file.b64 -out file.bin
//以AES-128算法使⽤⼀个⼝令和派⽣的PBKDF2密钥加密⼀个⽂件
openssl enc -aes128 -pbkdf2 - -out file.aes128
//以AES-128算法使⽤同样的⼝令解密刚才的⽂件
openssl enc -aes128 -pbkdf2 -d -in file.aes128 - -pass pass:<password>
/
/以AES-256-ctr算法使⽤⼀个⼝令和派⽣的PBKDF2密钥加密⼀个⽂件并⽤Base64编码
openssl enc -aes-256-ctr -pbkdf2 -a - -out file.aes256
//⽤Base64解码刚刚那个⽂件并⽤同样的算法和⼝令解密
openssl enc -aes-256-ctr -pbkdf2 -d -a -in file.aes256 - -pass file:<passfile>
//加⼊-k和-iv参数
//加密(提供密钥)
openssl enc -aes-128-cbc -e -K 000 -iv 000 - -out test.cipher  -a -A  -p
//解密
openssl enc -aes-128-cbc -d -K 000 -iv 000 -in test.ciphet -a -A  -out test.plain  -p
//加盐
//加密(提供⼝令)
openssl enc -aes-128-cbc -e  -pass pass:123456 -S a1bec3d4e5f6 -salt -md sha1 -iv 000 -out test.cipher  -a -A  -p //解密
openssl enc -aes-128-cbc -d  -pass pass:123456 -S a1bec3d4e5f6 -salt -md sha1 -iv 000 in test.cipher -out test.plain  -a -A  -p BUGS
-A选项在遇到⼤⽂件时将不会起作⽤
enc命令只⽀持它本⾝提供的具有固定数字参数的算法

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。