说明
  本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。  
  openssl官网   Linux自学笔记——OpenSSL命令行工具Linux 中的 Openssl命令及实例代码、   有时间在补充。

使用介绍

一、确认是否已安装openssl

  输入指令:which openssl

hhb@xsndz:~/桌面$ which openssl
/usr/bin/openssl

二、两种运行方式

  ①交互方式:

hhb@xsndz:~/桌面$ /usr/bin/openssl
OpenSSL> help
Standard commands
asn1parse         ca                ciphers           cms 
......
OpenSSL>

  ②命令行方式(批处理方式):

hhb@xsndz:~/桌面$ /usr/bin/openssl help
Standard commands
asn1parse         ca                ciphers           cms 
......

三、help命令——查看命令

  输入指令:/usr/bin/openssl help   会列出很多命令主要包含三个方面:
    ①标准命令(Standard commands)
    ②消息摘要命令(Message Digest commands )(dgst子命令)
    ③加密的命令(Cipher commands )(enc子命令)

四、对称加密

  工具:openssl enc gpg
  支持的算法:3des,aes,blowfish,towfish

1️⃣enc命令:(man openssl-enc)

  1.描述
    对称密码命令允许使用基于密码或显式提供的密钥使用各种块和流加密或解密数据。
    Base64编码或解码也可以单独执行,也可以在加密或解密之外执行。
  2.选项
    ①-in filename:指定要加密的文件存放路径
    ②-out filename:指定加密后的文件存放路径
    ③-salt:自动插入一个随机数作为文件内容加密,默认选项
    ④-e:可以指明一种加密算法,若不指的话将使用默认加密算法
    ⑤-d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致
    ⑥-a/-base64:使用-base64位编码格式
    等等
  3.示例
    ①用base64编码/解码二进制文件
      <1> base64加密一个二进制文件:./openssl base64 -in file.bin -out file.b64       <2> base64解码一个二进制文件:./openssl base64 -d -in file.b64 -out file.bin     ②使用AES-128算法,使用提示密码和PBKDF2密钥
      <1> 加密文件;使用AES-128算法,使用提示密码 和 PBKDF2密钥。

xsndz@Linux:~/https/openssl/apps$ ./openssl enc -aes128 -pbkdf2 -in file.txt -out file.aes128
enter AES-128-CBC encryption password:
Verifying - enter AES-128-CBC encryption password:

      <2> 解密文件;使用上面设置的密码解密文件

xsndz@Linux:~/https/openssl/apps$ ./openssl enc -aes128 -pbkdf2 -d -in file.aes128 -out file.txt -pass pass:123
或
xsndz@Linux:~/https/openssl/apps$ ./openssl enc -aes128 -pbkdf2 -d -in file.aes128 -out file.txt
enter AES-128-CBC decryption password:

    ③在CTR模式下使用AES-256加密文件,使用base64编码,并派生PBKDF2密钥:
      <1> 加密文件;在CTR模式下使用AES-256加密文件,然后使用base64编码(例如,这样它就可以通过邮件发送),并派生PBKDF2密钥:

xsndz@Linux:~/Desktop/try$ openssl enc -aes-256-ctr -pbkdf2 -a -in file.txt -out file.aes256
enter AES-256-CTR encryption password:
Verifying - enter AES-256-CTR encryption password:

      <2> 解密文件;Base64解码一个文件,然后使用文件中提供的密码解密它:

xsndz@Linux:~/Desktop/try$ openssl enc -aes-256-ctr -pbkdf2 -d -a -in file.aes256 -out file.txt
enter AES-256-CTR decryption password:

    -aBase64处理数据。这意味着如果进行了加密,数据在加密后是base64编码的。如果设置了decryption,则输入数据将在解密之前进行base64解码。

五、非对称加密(公钥加密)

  (1)加密解密
    算法:RSA,ELGamal
    工具:openssl rsautl,gpg
  (2)数字签名
    算法:RSA,DSA,ELGamal
  (3)密钥交换
    算法:DH
  (4)生成密钥
    ①生成私钥:#(umask077 ;openssl genrsa –out /path/to/private_key_fileNUM_BITS)
    ②提出公钥:#openssl rsa –in /path/from/private_key_file -pubout

六、单向加密(消息摘要)

  工具:openssl dgst,md5sum,sha1sum,sha224sum,…

1️⃣dgst命令(man openssl-passwd)

  1.描述:执行digest操作
    此命令以十六进制输出所提供文件的消息摘要,并使用消息摘要生成和验证数字签名。
    通用名openssl dgst可以与一个指定要使用的算法的选项一起使用。默认值为sha256。受支持的摘要名称也可以用作子命令名称。要查看支持的算法列表,请使用“openssl list -digest-commands”
  2.选项
    ①-hex:摘要将以十六进制转储的形式输出。这是“普通”摘要相对于数字签名的默认情况。有关使用-hex的数字签名,请参阅下面的注释。
    ②-sign filename|uri:使用给定的私钥对摘要进行数字签名。注意,此选项不支持Ed25519或Ed448私钥。使用openssl-pkeyutl(1)命令代替。
    ③-verify filename:使用“filename”中的公钥验证签名。输出为“Verified OK”或“Verification Failure”。
    等等
  3.示例
    ①标准输入单向加密

xsndz@Linux:~/Desktop/try$ echo "helloworld" | openssl dgst -md5
MD5(stdin)= d73b04b0e696b0945283defa3eee4538

    ②创建一个十六进制编码的消息摘要的文件:

openssl dgst -md5 -hex file.txt

    ③使用SHA-256对二进制文件输出进行签名:

openssl dgst -sha256 -sign privatekey.pem -out signature.sign file.txt

    ④验证签名:

openssl dgst -sha256 -verify publickey.pem -signature signature.sign file.txt

七、生成用户密码

   工具:passwd,openssl passwd

1️⃣passwd命令(man openssl-passwd)

  1.描述:计算密码散列
    此命令计算运行时输入的密码的散列值或列表中每个密码的散列值。
    密码列表从指定文件中获取option -in,从stdin中获取option -stdin,或者从命令行中获取,或者从终端中获取。
  2.选项
    ①-1:使用基于MD5的BSD密码算法1(默认)。
    ②-apr1:使用apr1算法(BSD算法的Apache变体)。
    ③aixmd5:使用AIX MD5算法(BSD算法的AIX变体)。
    ④-salt string:使用指定的salt 。当从终端读取密码时,这意味着-noverify
    ⑤-noverify:从终端读取密码时不要验证。
    等等
  3.示例
    ①基于MD5的BSD密码算法

xsndz@Linux:~/Desktop/try$ ./openssl passwd -1 -salt 1111 password
$1$1111$8gXsDtIMRT261gO45Cmu70

    ②使用apr1算法

xsndz@Linux:~/Desktop/try$ ./openssl passwd -apr1 -salt 1111 password
$apr1$1111$yBwo2dG/ViV719847Lg6c0

    ③使用AIX MD5算法

xsndz@Linux:~/Desktop/try$ ./openssl passwd -aixmd5 -salt 1111 password
1111$CBOl9BGVG23xfwwQ5mX4m0

八、生成随机数

  工具:openssl rand

1️⃣rand命令(man openssl-rand)

  1.描述:生成伪随机字节
    该命令使用加密安全的伪随机数生成器(cspring)生成num随机字节。
    随机字节是使用RAND_bytes(3)函数生成的,该函数提供256位的安全级别,前提是它设法从一个受信任的操作系统成功地播种自己
  2.选项
    ①-out file:写入文件,而不是标准输出。
    ②-base64:对输出执行base64编码
    ③-hex:将输出显示为十六进制字符串。
    等等
  3.示例:(20指明生成20个字节随机数)
    ①输出执行base64编码

xsndz@Linux:~/Desktop/try$ ./openssl rand -base64 20
/4MlwRTu0wC9Z6LYYUPfu7YK9j0=

    ②输出显示为十六进制字符串。

xsndz@Linux:~/Desktop/try$ ./openssl rand -hex 20
59c3bcd28697648a3f9ce29bdc3220449ccfa1de