openssl基础知识以及部分命令详解
⼀、基础知识
Openssl是⼀个开源的⽤以实现SSL协议的产品,它主要包括了三个部分:密码算法库、应⽤程序、SSL协议库。Openssl实现了SSL协议所需要的⼤多数算法。
OpenSSL⼀共提供了8种对称加密算法,其中7种是分组加密算法,仅有的⼀种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都⽀持电⼦密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常⽤的分组密码加密模式。其中,AES使⽤的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使⽤的则是64位。事实上,DES算法⾥⾯不仅仅是常⽤的DES算法,还⽀持三个密钥和两个密钥3DES算法。
下⾯是使⽤Openssl进⾏⽂件的对称加密操作。
(⼀)Openssl⽀持的加密算法有:
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ecb -aes-128-ofb
-aes-192-cbc -aes-192-cfb -aes-192-cfb1
-aes-192-cfb8 -aes-192-ecb -aes-192-ofb
-aes-256-cbc -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ecb -aes-256-ofb
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-
des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-ofb -des-ofb
-des3 -desx -desx-cbc
-rc2 -rc2-40-cbc -rc2-64-cbc
-rc2-cbc -rc2-cfb -rc2-ecb
-rc2-ofb -rc4 -rc4-40
(⼆)Openssl加密指令语法
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e][-d] [-a] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-p][-P] [-bufsize number] [-nopad] [-debug]
说明:
-chipername选项:加密算法,Openssl⽀持的算法在上⾯已经列出了,你只需选择其中⼀种算法即可实现⽂件加密功能。
-in选项:输⼊⽂件,对于加密来说,输⼊的应该是明⽂⽂件;对于解密来说,输⼊的应该是加密的⽂件。该选项后⾯直接跟⽂件名。
cipher命令 -out选项:输出⽂件,对于加密来说,输出的应该是加密后的⽂件名;对于解密来说,输出的应该是明⽂⽂件名。
-pass选项:选择输⼊⼝令的⽅式,输⼊源可以是标准输⼊设备,命令⾏输⼊,⽂件、变量等。
-e选项:实现加密功能(不使⽤-d选项的话默认是加密选项)。
-d选项:实现解密功能。
-a和-A选项:对⽂件进⾏BASE64编解码操作。
-K选项:⼿动输⼊加密密钥(不使⽤该选项,Openssl会使⽤⼝令⾃动提取加密密钥)。
-IV选项:输⼊初始变量(不使⽤该选项,Openssl会使⽤⼝令⾃动提取初始变量)。
-salt选项:是否使⽤盐值,默认是使⽤的。
-p选项:打印出加密算法使⽤的加密密钥。
(三)案例
openssl的对称加密算法指令主要⽤来对数据进⾏加密和解密处理,openssl基本上为所有其⽀持的对称加密算法都提供了指令的⽅式的应⽤,这些应⽤指令的名字基本上都是以对称加密算法本⾝的名字加上位数、加密模式或者其他属性组合⽽成。例如DES算法的CBC模式,其对应的指令就是des-cbc。
原来openssl提供了两种⽅式调⽤对称加密算法:
⼀种就是直接调⽤对称加密指令,例如:
openssl des-cbc - - -pass pass:12345678
另外⼀种是使⽤enc的⽅式,即⽤对称加密指令作为enc指令的参数,例如:.
openssl enc -des-cbc - - -pass pass:12345678
上述两条指令完成的功能是⼀样的,⽽且其参数也是⼀样。原来enc是作⽤是什么呢?简单来说,为了
省事……。
openssl提供了N多的对称加密算法指令,enc就是把这些N多的对称的加密算法指令统⼀集成到enc指令中。当⽤户使⽤时,只需使⽤enc,指定加密算法,就是完成单独的加密算法指令完成的操作。⽽且,enc中可以指定的对称加密算法指令可能并没有以单独指令的形式存在。所有笔者建议使⽤enc这种⽅式。
当然,虽然openssl为我们提供的对称加密算法指令虽然功能强⼤,但并不完整,例如对称加密算法不⽀持76位的RC2加解密或者84位的RC4加解密灯功能。如果想灵活的使⽤这些加密算法和模式,就需要学习openssl提供的API
利⽤OpenSSL作对称加密需要使⽤其⼦命令enc,其⽤法为:
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]
其中常⽤的选项为:
-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 #标准输⼊
-e —— 加密,⼆选⼀
-d —— 解密,⼆选⼀
-a/-base64 —— 加密时设置结果以base64编码,,解密时设置输⼊为base64
-A ——加密时设置结果以base64编码成⼀⾏,解密时设置输⼊为⼀⾏base6
-K key —— 加密秘钥,16进制
-iv IV ——初始向量,16进制
-S salt ——指定16进制盐值
-salt ——带有随机盐值⼆选⼀
-z ——是否压缩,需要编译时选择了zlib库
-md digstname —— 摘要算法,当没有提供密钥时候,⽤于从⼝令中⽣成⼀个密钥,默认md5
-p ——打印出使⽤的salt、⼝令以及初始化向量IV。⼆选⼀
-P ——打印出使⽤的salt、⼝令以及初始化向量IV。不做加解密,⼆选⼀ -bufsize number ——缓冲区⼤⼩
-nopad ——⽆填充
-debug ——打印调试信息
-none ——不执⾏加解密
-engine id ——引擎
-cihername ——要使⽤的加密算法,⽀持的加密算法如下
-aes-128-cbc -aes-128-cbc-hmac-sha1 -aes-128-cbc-hmac-sha256
-aes-128-ccm -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ctr -aes-128-ecb
-aes-128-gcm -aes-128-ofb -aes-128-xts
-aes-192-cbc -aes-192-ccm -aes-192-cfb
-aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr
-aes-192-ecb -aes-192-gcm -aes-192-ofb
-aes-256-cbc -aes-256-cbc-hmac-sha1 -aes-256-cbc-hmac-sha256
-
aes-256-ccm -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ctr -aes-256-ecb
-aes-256-gcm -aes-256-ofb -aes-256-xts
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1
-camellia-128-cfb8 -camellia-128-ecb -camellia-128-ofb
-camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1
-camellia-192-cfb8 -camellia-192-ecb -camellia-192-ofb
-camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1
-
camellia-256-cfb8 -camellia-256-ecb -camellia-256-ofb
-camellia128 -camellia192 -camellia256
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8
-des-ede3-ofb -des-ofb -des3
-desx -desx-cbc -id-aes128-CCM
-
id-aes128-GCM -id-aes128-wrap -id-aes192-CCM
-id-aes192-GCM -id-aes192-wrap -id-aes256-CCM
-id-aes256-GCM -id-aes256-wrap -id-smime-alg-CMS3DESwrap
-rc2 -rc2-40-cbc -rc2-64-cbc
-rc2-cbc -rc2-cfb -rc2-ecb
-rc2-ofb -rc4 -rc4-40
-rc4-hmac-md5 -seed -seed-cbc
-seed-cfb -seed-ecb -seed-ofb
⼆、命令详解
1、des3 desx:不同的加密算法(在密码学课程中会做详细的学习)
例:对⽂件进⾏加密,密码为123456
openssl des3 -salt -k 123456 -in -out des3
对des3 解密
openssl enc -des3 -d -in des3 -out
2、rc2:rc2是⼀种加密算法
rc2-40-cbc:cbc是⽀持的加密分组链接模式, 40为位数。
rc2-64-cbc:cbc是⽀持的加密分组链接模式, 64为位数。
rc2-cbc:cbc是⽀持的加密分组链接模式。
rc2-cfb:cfb是加密反馈模式。
rc2-ecb:ecb是电⼦密码本模式。
rc2-ofb:ofb是输出反馈模式。
rc4:OpenSSL⼀共提供了8种对称加密算法,其中7种是分组加密算法,仅有的⼀种流加密算法是RC4。
rc4-40:40为对应的位数。
补充:Rc2加密算法:
(1).introduction
RC2是⼀种传统的私钥块加密算法,曾经被考虑作为DES算法的替代品。输⼊和输出块⼤⼩都是64bits。⽽密钥是可变的,从1byte到128bytes,现在常⽤的是8字节。
Algorithm description
字:16⽐特位;‘+’:加;‘&’:表⽰⽐特敏感的与操作;‘XOR’:表⽰⽐特敏感的与或操作;‘~’:表⽰换位补码;‘^’:表⽰取幂运算;
(2).key expansion(密钥扩展)
对于字操作,将规定缓存位置K[0],…,K[63];each K[i] is a 16 bit word
对于⽐特位操作,将规定缓存位置L[0],…,L[127];each L[i] is an eight-bit字节。
转换公式:K[i] = L[2*i] + 256*L[2*i+1].
密钥扩张的⽬的就是根据提供的密钥将其扩张成要求的密钥长度。
(3).Encryption algorithm(加密算法)
主要是两个操作,mix和mash操作。’x rol k’表⽰16⽐特位左转k位,⾼位补低位。
3.1 Mix up R[i]
3.2 Mixing round
3.3 Mash R[i]
3.4 Mashing round
3.5 Encryption operation
(4).Decryption algorithm(解密算法) 4.1 R-Mix up R[i]
4.2 R-Mixing round
4.3 R-Mash R[i]
4.4 R-Mashing round
4.5 Decryption operation
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论