OpenSSL功能之强大,命令组合用法之多,往往让我们的学习不知所措。在此,我们来对openssl命令的使用做一个总结。

OpenSSl命令总览:

语法格式:

openssl command [ command_opts ] [ command_args ]

常用command:

version    用于查看版本信息enc        用于加解密ciphers    列出加密套件genrsa     用于生成私钥rsa        RSA密钥管理(例如:从私钥中提取公钥)req        生成证书签名请求(CSR)crl        证书吊销列表(CRL)管理ca         CA管理(例如对证书进行签名)dgst       生成信息摘要rsautl     用于完成RSA签名、验证、加密和解密功能passwd     生成散列密码rand       生成伪随机数speed      用于测试加解密速度                    s_client   通用的SSL/TLS客户端测试工具X509       X.509证书管理verify      X.509证书验证pkcs7       PKCS#7协议数据管理

OpenSSL命令---version:
用途:

version命令用来打印版本以及openssl其他各种信息。

用法:

openssl version [-a] [-v] [-b] [-o] [-f] [-p] [-d]

选项说明:

-a:打印所有信息。-v:仅打印版本信息-b:打印当前版本构建的日期-o:库构建时的相关信息-f:编译参数-p:平台信息-d: 列出openssl的安装目录

OpenSSL命令---enc:
用途:

对称加密算法工具。它能够运用块或流算法对数据进行加解密。还能够将加解密的结果进行base64编码。

用法:

openssl enc -ciphername [-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] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]

选项说明:

-ciphername:对称算法名称,此命令有两种使用方式:-ciphername方式或者省略enc直接使用ciphername。-in filename:要加密/解密的输入文件,默认为标准输入。-out filename:要加密/解密的输出文件,默认为标准输出。-pass arg:输入文件如果有密码保护,指定密码来源。-e:进行加密操作,默认操作。可以省略-d:进行解密操作。-a:使用base64编码对加密结果进行处理。加密后进行base64编码,解密前进行base64解密。-base64:同-a选项。-A:默认情况下,base64编码为一个多行的文件。使用此选项,可以让生成的结果为一行。解密时,必须使用同样的选项,否则读取数据时会出错。-k:指定加密口令,不设置此项时,程序会提示用户输入口令。-kfile:指定口令存放文件。可以从这个口令存放文件的第一行读取加密口令。-K key:使用一个16进制的输入口令。如果仅指定-K key而没有指定-k password,必须用-iv选项指定IV。当-K key和-k password都指定时,用-K选项给定的key将会被使用,而使用password来产生初始化向量IV。不建议两者都指定。-iv IV:手工指定初始化向量(IV)的值。IV值是16进制格式的。如果仅使用-K指定了key而没有使用-k指定password,那么就需要使用-iv手工指定IV值。如果使用-k指定了password,那么IV值会由这个password的值来产生。-salt:产生一个随机数,并与-k指定的password串联,然后计算其Hash值来防御字典攻击和rainbow table攻击。

rainbow table攻击:用户将密码使用单向函数得到Hash摘要并存入数据库中,验证时,使用同一种单向函数对用户输入口令进行Hash得到摘要信息。将得到的摘要信息和数据中该用户的摘要信息进行比对,一致则通过。考虑到多数人使用的密码为常见的组合,攻击者可以将所有密码的常见组合进行单向Hash,得到一个摘要组合。然后与数据库中的摘要进行比对即可获得对应的密码。

salt将随机数加入到密码中,然后对一整串进行单向Hash。攻击者就很难通过上面的方式来得到密码。

-S salt:使用16进制的salt。-nosalt:表示不使用salt。-z:压缩数据(前提是OpenSSL编译时加入了zip库)。-md:指定摘要算法。如:MD5  SHA1  SHA256等。-p:打印出使用的salt、口令以及初始化向量IV。-P:打印出使用的salt、口令以及IV,不做加密和解密操作,直接退出。-bufsize number:设置I/O操作的缓冲区大小。因为一个加密的文件可能会很大,每次能够处理的数据是有限的。-nopad:没有数据填充(主要用于非对称加密操作)。-debug:打印调试信息。-none:不对数据进行加密操作。-engine:指定硬件引擎。

注意: 密码可以用来产生初始化密钥key和初始化向量IV。

新版的OpenSSL必须使用-salt选项。

OpenSSL支持的加密算法:des  des3  bf  cast cast5 rc2 rc4 rc5 aes等

使用实例:

对文件进行base64编码:

# which ls# cp /bin/ls .# file ls# openssl base64 -in ls -out ls.b64# file ls.b64对base64编码文件进行解码:# rm -rf ls# openssl base64 -d -in ls.b64 -out ls# file ls使用des3加密文件并在密码结果中加入salt:# echo "Hello World" >file.txt# cat file.txt# openssl des3 -salt -k 123456 -in file.txt -out file.des3# cat file.des3使用des3解密文件,并使用-k指定密码:# openssl des3 -d -salt -k 123456 -in file.des3 -out file2.txt# cat file2.txt使用bf算法加密文件,并将加密结果进行base64编码:# openssl bf -a -salt -k 123456 -in file.txt -out file.bf# file file.bf# cat file.bf先用base64解码文件,再解密:# openssl bf -d -salt -a -k 123456 -in file.bf -out file3.txt# cat file3.txt从密码文件中读取密码进行加解密:# echo "123456" >123.txt# cat 123.txt# openssl des3 -salt -kfile 123.txt -in file.txt -out file.des3      //加密# cat file.des3# openssl des3 -d -salt -k 123456 -in file.des3 -out file2.txt       //解密# cat file2.txt# openssl des3 -d -salt -kfile 123.txt -in file.des3 -out file3.txt  # cat file3.txt# echo "654321" >>123.txt# cat 123.txt# openssl des3 -salt -kfile 123.txt -in file.txt -out file3.des3# cat file3.des3# openssl des3 -d -salt -k 654321 -in file3.des4 -out file4.txt//解密失败 因为kfile只会读取密码文件的第一行作为密码进行加密# openssl des3 -d -salt -k 654321 -in file3.des4 -out file4.txt# cat file4.txt加密文件并进行压缩# dd if=/dev/zero of=/tmp/123 bs=100M count=10     //生成一个100M的文件# openssl des3 -salt -k 123456 -in 123 -out 123.des3    //普通加密# openssl des3 -salt -k 123456 -z -in 123 -out 123.des3.z   //带压缩的加密# du -sh /tmp/123  /tmp/123.des3  /tmp/123.des3.z      //比较文件大小打印salt、key和IV的信息:# rm -rf 123.des3# openssl des3 -salt -k 123456 -p -in 123 -out 123.des3        //打印信息 并加密# openssl des3 -salt -k 123456 -P -in 123 -out 123.des3.P     //仅打印信息 不加密

OpenSSL命令---ciphers:
用途:

用来展示加密算法套件的工具。它能够把所有OpenSSL支持的加密算法按照一定规律排列(一般是加密强度)。

用法:

openssl ciphers [-v] [-ssl2] [-ssl3] [-tls1] [cipherlist]

选项说明:

-v:详细列出所有加密套件。包括SSL版本(SSLv2、SSLv3以及TLS)、密钥交换算法、身份验证算法、对称算法、摘要算法以及该算法是否允许出口。-ssl2:只列出sslv2使用的加密套件。-ssl3:只列出sslv3使用的加密套件。-tls1: 只列出tls使用的加密套件。cipherlist:列出一个cipher list的详细内容。此项能列出所有符合规则的加密套件,如果不加-v选项,它只会显示各个套件名称。

cipherlist格式:

openssl ciphers ‘cipherstring1:cipherstring2.....'
          1)可以显示一个或多个cipher string套件。多个cipher string直接使用分隔符分割。

2)分隔符:通常使用冒号(:)分割,也可以使用逗号或空格来分割。

3)每一个cipher string前面都可以加上!、-、+

-:表示将这个cipher从List中删除。以后也可以选择再添加回来。

+: 表示将这个cipher移动到List的底部

注意:这个选项不是添加任何新的cipher,而只是移动匹配到的cipher。

!:表示将这个cipher从List中永久删除。

4)@STRENGTH 表示使用加密算法key的长度进行排序。使用实例:

# openssl ciphers -h          //列出ciphers参数简要帮助# openssl ciphers -v -ssl2 # openssl ciphers -v -ssl3# openssl ciphers -v -tls1# openssl ciphers 'SHA1'     //列出所有使用SHA1算法的套件# openssl ciphers 'SSLv3'    //列出SSLv3所使用的算法# openssl ciphers 'SHA1+DES'  //列出所有包含SHA1和DES的套件# openssl ciphers -v 'ALL:eNULL' //详细列出所有非加密算法# openssl ciphers -v 'ALL:!ADH:@STRENGTH' //列出所有不包含匿名DH的算法并排序# openssl ciphers -v '3DES:+RSA' //仅列出包含3DES和RSA算法的套件且将包含RSA的显示在底部

OpenSSL命令---genrsa:
用途:

用来产生RSA私钥。

用法:

openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand   file(s)] [-engine id] [numbits]

选项说明:

-out fiename: 指定输出文件。如果没有设定此选项,将会输出到标准输出。-passout arg: 指定密码来源。-des|-des3|-idea:用来加密私钥文件的三种对称加密算法。-F4|-3:指定指数。-f4为0x1001  -rand file(s):指定随机种子。-engine id:硬件引擎。numbits:  生成的密钥位数。必须是本指令的最后一个参数。默认为512bits。

使用实例:

# openssl genrsa -des3 -out prikey.pem -f4 1024

-----------------------------------
转载于:https://blog.51cto.com/shjia/1427138

OpenSSL 基础命令相关推荐

  1. Linux 基础命令讲解--加密解密

    Linux 基础命令讲解--加密解密 加密文件: 1.MD5 echo -n "string" | openssl md5   #加密字符串 openssl md5 -in tes ...

  2. rabbitmq基础2——rabbitmq二进制安装和docker安装、基础命令

    文章目录 一.RabbitMQ安装 1.1 二进制安装 1.2 rabbitmqctl工具 1.3 docker安装 二.rabbitmq基础命令 2.1 多租户与权限类 2.1.1 创建虚拟主机 2 ...

  3. linux指令 mk,Linux的基础命令

    基础命令: 1.查看当前目录下的文件和目录的详细信息 ls -l/ll 2.查看ip地址 ifconfig 3.查看当前目录 pwd 4.相对路径/绝对路径 cd 5.创建文件 touch 文件名 6 ...

  4. Mongodb基础命令与用法

    Mongodb基础命令与用法 查看版本号 [root@VM_0_12_centos bin]# ./mongo -version MongoDB shell version v3.6.5 git ve ...

  5. 干货!一篇文章集合所有Linux基础命令,适合所有菜鸟学习和老手回顾!

    阿里云   干货!一篇文章集合所有Linux基础命令,适合所有菜鸟学习和老手回顾! 1 文件{ ls -rtl # 按时间倒叙列出所有目录和文件 ll -rt touch file # 创建空白文件 ...

  6. Nginx安装、卸载、基础命令、配置

    Nginx安装.卸载.基础命令 安装 gcc安装失败 卸载 检查nginx服务启动情况 如果服务加入了自启动,则删除服务 删除nginx文件 如果使用yum安装的则使用命令删除依赖 基础命令 重启失败 ...

  7. linux 安装nginx 详解教程 nginx基础命令

    目录 一.nginx 安装 二.nginx 配置 三.nginx 基础命令 1.帮助命令 2.nginx启动命令 3.查看nginx启动进程 ​4.nginx停止 5.nginx重启 ​ 6.重新加载 ...

  8. linux基础命令行操作【1】

    目录 1.基本命令 2.文件相关知识 3.文本相关操作 4.文件解压.压缩.打包命令 1.基本命令 Ctrl+A/t+Fn+F6:管理Linux(Fn+数字) Linux:输入密码是不显示 Alt+F ...

  9. Linux安全基础:shell及一些基础命令

    1.什么是shell? Shell是用户和Linux操作系统之间的接口. Linux中有多种shell,其中缺省使用的是Bash. 2.shell的分类 (1)bash bash shell 是 Bo ...

最新文章

  1. 知道不知道 (刘若英演唱歌曲)
  2. C语言再学习 -- 输入/输出
  3. 13张PPT带你了解主动式消息队列处理集群
  4. Flask实现登录功能【附完整Demo】
  5. Sentinel系统规则_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0044
  6. 面试求职中需要了解的Java多线程知识
  7. enum class
  8. python 颜色条_python – 在Matplotlib / Cartopy中创建颜色条图例
  9. Android--关闭某个指定activity,android开发游戏
  10. 数据结构:自组织线性表
  11. Powerdesigner显示表的comment和列的comment的方法
  12. 微信答题小程序开发遇到过的坑
  13. poscms表结构和字段
  14. 续编-联想原装系统OEM系统联想出厂系统联想原装系统Lenovo ThinkPad ThinkBook出厂预装系统原厂系统
  15. 马云关于计算机名言,49句关于马云的名言
  16. 斗地主的Java实现
  17. 完美兼容MIC5203-3.3BM5的高压LDO-CSM5133SE/CSM5130SE
  18. day11-random模块-随机
  19. 女神说拍了一套写真集想弄成素描画?很简单,用Python就行了!
  20. CSS中清除浮动的代码

热门文章

  1. js encodeuricomponent php解码,Javascript下的urlencode编码解码方法附decodeURIComponent
  2. 浪子回头金不换:学软件开发找到人生春天
  3. Unity3D 升级2020版VR开发的一些问题
  4. pandas 学习预备知识总结
  5. 张国华:有了互联网+大数据,智慧城市也不能走计划经济的道路
  6. window xp 序列号|可用|有效的
  7. Dex.top(大力士)关于上线BOSC的公告
  8. centos7-32只有lo网卡的解决方法
  9. java邮箱正则表达式
  10. ng2学习笔记(一)初识ng2