当前位置:   article > 正文

openssl工具使用

openssl工具

openssl工具使用

1.获取随机数(rand)

# 获取帮助
$ openssl rand -h

# 获取16字节数据, 并且以16进制输出到屏幕
$ openssl rand -hex 16

# 获取16字节数据, 并且以16进制输出到infile.txt文件
$ openssl rand -out infile.txt -hex 16

# 获取16字节数据, 并且以base64输出到屏幕
$ openssl rand -base64 16

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.摘要digest(dgst)、hash

# 获取帮助
$ openssl dgst -h

# 用sha1算法对infile.txt做摘要
$ openssl dgst -sha1 infile.txt 

# 用sha256算法对infile.txt做摘要
$ openssl dgst -sha256 infile.txt 

# 用sha256算法对infile.txt做摘要, 结果输出到dgst_sha256文件
$ openssl dgst -sha256 -out dgst_sha256 infile.txt 

# 用带hmac key的sha256算法对infile.txt做摘要, 结果输出到dgst_sha256文件,key为12345678
$ openssl dgst -sha256 -out dgst_sha256_hmac -hmac 12345678 infile.txt 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.对称算法加密解密(enc/dec)

# 获取帮助
$ openssl enc -h

# 原始文件(待加密的文件)infile.txt:
$ cat infile.txt 
c3faf198553d22638cf24182577c3a56

# 用aes-128-ecb -e加密, -K接密钥, -p打印key和iv(若-P直接打印key和iv, 生成的-out文件为空)
# 需要加密的文件为infile.txt, 加密后的文件为outfile.txt
# 密钥:11223344112233441122334411223344
$ openssl aes-128-ecb -e -K 11223344112233441122334411223344 -in infile.txt -out outfile.txt -p
# 用aes-128-ecb -d解密, -K接密钥, -p打印key和iv(若-P直接打印key和iv, 生成的-out文件为空)
# 密钥为11223344112233441122334411223344, decfile.txt解密后的文件
$ openssl aes-128-ecb -d -K 11223344112233441122334411223344 -in outfile.txt -out decfile.txt -p

# 用aes-128-cbc -e加密, -K接密钥 -iv接iv值
# 密钥为11223344112233441122334411223344
# iv值为55667788556677885566778855667788
$ openssl aes-128-cbc -e -K 11223344112233441122334411223344 -iv 55667788556677885566778855667788 -in infile.txt -out outfile.txt -p
# 用aes-128-cbc -d解密, -K接密钥 -iv接iv值
$ openssl aes-128-cbc -d -K 11223344112233441122334411223344 -iv 55667788556677885566778855667788 -in outfile.txt -out dec_cbc_file.txt -p

# 用aes-128-cbc -e加密, -pass pass:123456
$ openssl aes-128-cbc -e -in infile.txt -out outfile.txt -pass pass:123456 -p
# 用aes-128-cbc -d解密, -pass pass:123456
$ openssl aes-128-cbc -d -in outfile.txt -out dec_cbc_file.txt -pass pass:123456 -p

# 新建文件pwfile,内容为123456
# 用aes-128-cbc -e加密, -pass file:pwfile
$ openssl aes-128-cbc -e -in infile.txt -out outfile.txt -pass file:pwfile -p
# 用aes-128-cbc -d解密, -pass file:pwfile
$ openssl aes-128-cbc -d -in outfile.txt -out dec_cbc_file.txt -pass file:pwfile -p
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

4. 非对称算法

4.1 公私钥对的生成

rsa算法私钥生成
# 获取帮助
$ openssl genrsa -h

# 产生rsa私钥, 打印的屏幕, 默认输出私钥长度为2048bits
$ openssl genrsa

# 产生rsa私钥, 打印的屏幕, 指定私钥长度为2048bits
$ openssl genrsa 2048

# 产生rsa私钥, 输出到private_key文件, 默认输出私钥长度为2048bits
$ openssl genrsa -out private_key
# Generating RSA private key, 2048 bit long modulus

# 产生rsa私钥, 输出到private_key文件, 默认输出私钥长度为2048bits, 用des加密, 接下来需要输入des密钥
# des算法使用56bit密钥, des3算法使用168bit密钥
$ openssl genrsa -out private_key -des

产生rsa私钥, 输出到private_key文件, 指定输出私钥长度为4096bits, 用des加密, 接下来需要输入des密钥
$ openssl genrsa -out private_key -des 4096

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
rsa算法公钥生成
# 获取帮助
$ openssl rsa -h

# 用rsa私钥文件private_key.txt生成公钥文件public_key.txt
# -pubout 指定输出文件是公钥
$ openssl rsa -in private_key.txt -pubout -out public_key.txt

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.2 rsa加解密

注意:无论是使用公钥加密还是私钥加密,RSA每次能够加密的数据长度不能超过RSA密钥长度,并且根据具体的补齐方式不同输入的加密数据最大长度也不一样,而输出长度则总是跟RSA密钥长度相等。RSA不同的补齐方法对应的输入输入长度如下表

# 获取帮助
$ openssl rsautl -h

# 方法一:
# 使用私钥文件进行加密-inkey private_key, 加密结果输出到-out rsa_enc_out.txt
$ openssl rsautl -encrypt -in infile.txt -inkey private_key -out rsa_enc_out.txt
$ cat rsa_enc_out.txt 
屏幕显示 乱码

# 使用私钥文件进行解密-inkey private_key, 解密结果输出到-out rsa_infile.txt
$ openssl rsautl -decrypt -in rsa_enc_out.txt -inkey private_key -out rsa_infile.txt

# 方法二:
# 生成RSA密钥
$ openssl genrsa -des3 -passout pass:123456 -out RSA.pem

# 提取公钥
$ openssl rsa -in RSA.pem -passin pass:123456 -pubout -out pub.pem

# 使用RSA作为密钥进行加密,实际上使用其中的公钥进行加密
$ openssl rsautl -encrypt -in plain.txt -inkey RSA.pem -passin pass:123456 -out enc.txt
$ cat enc.txt 
屏幕显示 乱码

# 使用RSA作为密钥进行解密,实际上使用其中的私钥进行解密
$ openssl rsautl -decrypt -in enc.txt -inkey RSA.pem -passin pass:123456 -out replain.txt
$ cat replain.txt 
屏幕显示 c3faf198553d22638cf24182577c3a56

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

参考:

https://www.jianshu.com/p/15b1d935a44b
openssl 对称加密算法enc命令详解 - Gordon0918 - 博客园

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/834122
推荐阅读
相关标签
  

闽ICP备14008679号