澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

OpenSSL之对称加密算法命令详解,对称加密

2019-12-12 作者:澳门新萄京官方网站   |   浏览(113)

openssl类别小说:http://www.cnblogs.com/f-ck-need-u/p/7048359.html**

openssl enc(对称加密卡塔尔(英语:State of Qatar),opensslenc加密

对称加密工具。通晓对称加密的规律后就超级轻巧了,原理部分见下文。

openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-k password] [-S salt] [-salt] [-md] [-p/-P]
选项说明:
-ciphername:指定对称加密算法(如des3),可独立于enc直接使用,如openssl des3或openssl enc -des3。推荐在enc后使用,这样不依赖于硬件
-in filename :输入文件,不指定时默认是stdin
-out filename:输出文件,不指定时默认是stdout
-e:对输入文件加密操作,不指定时默认就是该选项
-d:对输入文件解密操作,只有显示指定该选项才是解密
-pass:传递加、解密时的明文密码。若验证签名时实用的公钥或私钥文件是被加密过的,则需要传递密码来解密。密码的格式见"openssl 密码格式"
-k     :已被"-pass"替代,现在还保留是为了兼容老版本的openssl
-base64:在加密后和解密前进行base64编码或解密,不指定时默认是二进制。注意,编码不是加解密的一部分,而是加解密前后对数据的格式"整理"
-a:等价于-base64
-salt:单向加密时使用salt复杂化单向加密的结果,此为默认选项,且使用随机salt值
-S salt:不使用随机salt值,而是自定义salt值,但只能是16进制范围内字符的组合,即"0-9a-fA-F"的任意一个或多个组合
-p:打印加解密时salt值、key值和IV初始化向量值(也是复杂化加密的一种方式),解密时还输出解密结果,见后文示例
-P:和-p选项作用相同,但是打印时直接退出工具,不进行加密或解密操作
-md:指定单向加密算法,默认md5。该算法是拿来加密key部分的,见后文分析。

扶植的单向加密算法有:

-md4            to use the md4 message digest algorithm
-md5            to use the md5 message digest algorithm
-ripemd160      to use the ripemd160 message digest algorithm
-sha            to use the sha message digest algorithm
-sha1           to use the sha1 message digest algorithm
-sha224         to use the sha224 message digest algorithm
-sha256         to use the sha256 message digest algorithm
-sha384         to use the sha384 message digest algorithm
-sha512         to use the sha512 message digest algorithm
-whirlpool      to use the whirlpool message digest algorithm

帮衬的对称加密算法有:

-aes-128-cbc               -aes-128-cbc-hmac-sha1     -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-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-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-GCM             -id-aes128-wrap            -id-aes128-wrap-pad      
-id-aes192-GCM             -id-aes192-wrap            -id-aes192-wrap-pad      
-id-aes256-GCM             -id-aes256-wrap            -id-aes256-wrap-pad      
-id-smime-alg-CMS3DESwrap  -idea                      -idea-cbc                 
-idea-cfb                  -idea-ecb                  -idea-ofb                
-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

在给出openssl enc命令用法示例此前,先表明下对称加密和平解决密的准绳和进程。

对称加解密时,它们采纳的密码是完全相近的,譬喻"123456",但那是密码,且是公开密码,特不安全,所以应该对此轻易密码进行复杂化。最直白的方法是运用单向加密计算出明文密码的hash值,单向加密后新调换的密码已经相比安全(称之为密钥比较好卡塔尔,能够用作对称加密时的对称密钥。此外,由于同风流洒脱单向加密算法对近似明文密码的思虑结果是完全生机勃勃致的,这样解密时选用同样的单向加密算法就会总括出完全相近的密钥,也便是解密时的相辅而行密钥。要是想要更安全,还是能在对称加密后对加密文书举办重新编码,如采用"base64"、二进制或hex编码格局进行编码,但相应的在解密前就供给先解码,解码后才干解密。

据此,将对称加、解密的编写制定轻松归纳如下:

对称加密机制:根据内定的单向加密算法,对输入的公开密码进行单向加密(暗中同意是md5卡塔尔,获得固定长度的加密密钥,即对称密钥,再依据钦赐的对称加密算法,使用对称密钥加密文书,最后再一次编码加密后的文件。即单向加密公开密码结果作为对称密钥、使用对称密钥加密文书、对文本再一次编码。

对称解密机制:先解码文件,再依附单向加密算法对解密时输入的公开密码总结获得对称密钥,依此对称密钥对称解密解码后的文书。

所以,解密进度中应用的解码方式、单向加密和对称加密算法都必需生龙活虎律,且输入的密码必需是不易密码。但供给小心的某个是,解密时方可不内定salt,因为加密时利用的salt会记录下来,解密时能够读取该salt。

如下图所示,分别是加密和解密进程暗中表示图。

澳门新萄京官方网站 1

示例:

以加密/etc/fstab的备份文件/tmp/test.txt为例。

(1卡塔尔.首先测量检验openssl enc的编码功效。由于未钦赐密码选项"-k"或"-pass",所以唯有只进行编码而不开展加密,由此也不会唤起输入密码。

[[email protected] tmp]# openssl enc -a -in test.txt -out test_base64.txt

[[email protected] tmp]# cat test_base64.txt
CiMKIyAvZXRjL2ZzdGFiCiMgQ3JlYXRlZCBieSBhbmFjb25kYSBvbiBUaHUgTWF5
IDExIDA0OjE3OjQ0IDIwMTcKIwojIEFjY2Vzc2libGUgZmlsZXN5c3RlbXMsIGJ5
IHJlZmVyZW5jZSwgYXJlIG1haW50YWluZWQgdW5kZXIgJy9kZXYvZGlzaycKIyBT
ZWUgbWFuIHBhZ2VzIGZzdGFiKDUpLCBmaW5kZnMoOCksIG1vdW50KDgpIGFuZC9v
ciBibGtpZCg4KSBmb3IgbW9yZSBpbmZvCiMKVVVJRD1iMmE3MGZhZi1hZWE0LTRk
OGUtOGJlOC1jNzEwOWFjOWM4YjggLyAgICAgICAgICAgICAgICAgICAgICAgeGZz
ICAgICBkZWZhdWx0cyAgICAgICAgMCAwClVVSUQ9MzY3ZDZhNzctMDMzYi00MDM3
LWJiY2ItNDE2NzA1ZWFkMDk1IC9ib290ICAgICAgICAgICAgICAgICAgIHhmcyAg
ICAgZGVmYXVsdHMgICAgICAgIDAgMApVVUlEPWQ1MDUxMTNjLWRhYTYtNGMxNy04
YjAzLWIzNTUxY2VkMjMwNSBzd2FwICAgICAgICAgICAgICAgICAgICBzd2FwICAg
IGRlZmF1bHRzICAgICAgICAwIDAK

再以base64格式实行解码。

[[email protected] tmp]# openssl enc -a -d -in test_base64.txt              

#
# /etc/fstab
# Created by anaconda on Thu May 11 04:17:44 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 /                       xfs     defaults        0 0
UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot                   xfs     defaults        0 0
UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap                    swap    defaults        0 0

实际上,上述编码和平解决码的经过严谨地说也是对称加密和平解决密,因为openssl enc暗中同意会带上加密选项"-e",只可是因为从没点名输入密码选项,使用的加密密码为空而已,且单向加密算法使用的也是默许值。解密时也同等。

(2卡塔尔国.测验使用des3对称加密算法加密test.txt文件。

[[email protected] tmp]# openssl enc -a -des3 -in test.txt -out test.1 -pass pass:123456 -md md5

加密后,查看加密后文件test.1的结果。

[[email protected] tmp]# cat test.1
U2FsdGVkX1 c/d4NsXnY6Pd7rcZjGSsMRJWQOP0s5sxH6aLE5iCYjKEAbGac//iR
wkUUh6a57OpUA3 OOCKB4z IxBcKo67BUDGR9vYeCfkobH9F mSfVzZbXBrJmxwf
921tJ 8K yKB6DjJfufpW DWXmH8MFyvK60wnYHsfUQOp81EvaUtEfqEKIS8hgg7
4NTOyww /VMDdc2wmkf08XNQUPlVtLaSx3vuBisxRdu8raiKWGGOB7qCwELCxDqu
NaRCIh0VjjffGohAOMMsAQ2kFCDUKx0Z4Df5fvifhPXoHfsj2lI216BPG5Cy88K2
KV78DoBm4pnMAymo/HRRF95LjvWYZIN88hIVN67u2j9zqSGeuyJakMyDVhYYmrHl
sMr2YTbTwus2DiO6qAzt/0a9nocTVKfGR81Xsh0a0ZudjtrMl5H36YJawpldvUCa
DzXPsbpQrp0VGi2HvJ4EVKKEx2uh8XYWmJ4ytj1s1wtCR6wQhmERtInGwULWTyI 
agXStSB5XzsvAJRJvexsaNycj5lAoQ8O6YXEj7B0inB7nBQTFbwkXyvJqXpr1179
i67leYc59OvlhRMA GLW4g/Mg5dN5SBmgt1ChOJs4887zAUyLYrLvR4zDK6IQN/M
P6F15c9V m9pw2t32sUQQmYrYqOV/AQf0t0EwvA0Myjmfqtvmp555Q==

解密文件test.1。

[[email protected] tmp]# openssl enc -a -des3 -d -in test.1 -out test.2 -pass pass:123456 -md md5 

[[email protected] tmp]# cat test.2

#
# /etc/fstab
# Created by anaconda on Thu May 11 04:17:44 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 /                       xfs     defaults        0 0
UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot                   xfs     defaults        0 0
UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap                    swap    defaults        0 0

(3卡塔尔(英语:State of Qatar).加密时带上点盐salt。其实不写时暗许就已经投入了,只可是是加入随机盐值。使用-S能够内定明显要选用的盐的值。不过盐的值只可以是16进制范围内字符的整合,即"0-9a-fA-F"的即兴一个或八个组成。

[[email protected] tmp]# openssl enc -a -des3 -S 'Fabc' -in test.txt -out test.1 -pass pass:123456 -md md5    

解密。解密时不要钦点salt值,就算钦赐了也不会影响解密结果。      

[[email protected] tmp]# openssl enc -a -des3 -d -in test.1 -pass pass:123456 -md md5               

#
# /etc/fstab
# Created by anaconda on Thu May 11 04:17:44 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 /                       xfs     defaults        0 0
UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot                   xfs     defaults        0 0
UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap                    swap    defaults        0 0

[[email protected] tmp]# openssl enc -a -des3 -d -S 'Fabcxdasd' -in test.1 -pass pass:123456 -md md5

#
# /etc/fstab
# Created by anaconda on Thu May 11 04:17:44 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 /                       xfs     defaults        0 0
UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot                   xfs     defaults        0 0
UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap                    swap    defaults        0 0

(4卡塔尔(英语:State of Qatar).在测验下"-p"和"-P"选项的出口作用。小写字母p不仅仅输出密钥算法结果,还输出加解密的剧情,而大写字母P则只输出密钥算法结果。

加密时的意况。

[[email protected] tmp]# openssl enc -a -des3 -S 'Fabc' -in test.txt -out test.1 -pass pass:123456 -md md5 -p
salt=FABC000000000000
key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
iv =5128FDED01EE1499

内部key便是单向加密公然密码后拿到的对称密钥,iv是密码运算时采纳的向量值。

再看解密时的场馆,此处加上了salt。

[[email protected] tmp]# openssl enc -a -des3 -d -S 'Fabc' -in test.1 -pass pass:123456 -md md5 -P
salt=FABC000000000000
key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
iv =5128FDED01EE1499

若解密时不点名salt,只怕专擅内定salt,结果如下。

[[email protected] tmp]# openssl enc -a -des3 -d -in test.1 -pass pass:123456 -md md5 -P         
salt=FABC000000000000
key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
iv =5128FDED01EE1499

[[email protected] tmp]# openssl enc -a -des3 -S 'FabM' -d -in test.1 -pass pass:123456 -md md5 -P
salt=FABC000000000000
key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
iv =5128FDED01EE1499

可以知道,解密时,只要钦命和加密时生机勃勃致编码格式和单向加密算法,密钥的结果就是同样的,且解密时鲜明钦点salt是空泛的,因为它能够读取到加密时行使的salt。

竟然,解密时钦命区别的毛将安傅加密算法,密钥结果也是千篇风流罗曼蒂克律的。

[[email protected] tmp]# openssl enc -a -desx -d -in test.1 -pass pass:123456 -md md5 -p 
salt=FABC000000000000
key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
iv =5128FDED01EE1499

通过,能推理出对称加密时利用的博采众长密钥和对称算法是毫非亲非故系的。

 

回到openssl连串小说大纲:

OpenSSL之对称加密算法命令详明

1、对称加密算法概述

openssl的加密算法库提供了增进的扬长避短加密算法,我们得以经过openssl提供的对称加密算法指令的措施接收,也足以因此调用openssl提供的API的艺术接受。

openssl的扬长避短加密算法指令主要用来对数据开展加密和平解决密管理,openssl基本上为全体其协理的相辅相成加密算法都提供了指令的措施的运用,这么些使用指令的名字基本上都是以对称加密算法自身的名字加上位数、加密方式或许别的属性组合而成。举例DES算法的CBC方式,其对应的命令便是des-cbc。能够透过命令查看当前版本的openssl援助的博采有益的意见加密算法,比如Ubunt14.04 openssl版本及协理对称加密算法指令如下:

[email protected]:~$ openssl enc -help
unknown option '-'
options are
...
/**/
Cipher Types
-aes-128-cbc              -aes-128-cbc-hmac-sha1    -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-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-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-GCM            -id-aes192-GCM            -id-aes256-GCM           
-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 

可以看出上述大家实施的是enc -help命令,enc是什么事物?原本openssl提供了三种情势调用对称加密算法:

后生可畏种正是直接调用对称加密命令,举例:

openssl des-cbc -in plain.txt -out encrypt.txt -pass pass:12345678

其它意气风发种是运用enc的章程,即用对称加密命令作为enc指令的参数,举个例子:.

openssl enc -des-cbc -in plain.txt -out encrypt.txt -pass pass:12345678

上述两条指令完毕的效劳是黄金年代律的,何况其参数也是意气风发致。原本enc是职能是怎么样呢?轻巧的话,为了便利……。

openssl提供了N多的相得益彰加密算法指令,enc正是把这几个N多的扬长避短的加密算法指令统风度翩翩集成到enc指令中。当客户选择时,只需接收enc,钦命加密算法,正是水到渠成单独的加密算法指令完结的操作。并且,enc中得以钦点的对称加密算法指令恐怕并未以单独指令的花样存在。全部小编建议接受enc这种艺术。

本来,尽管openssl为大家提供的相辅相成加密算法指令就算成效强盛,但并不完全,比如对称加密算法不接济柒17个人的RC2加解密也许捌10个人的RC4加解密灯功能。假使想灵活的利用那些加密算法和格局,就供给上学openssl提供的API

2、对称加密算法指令参数

能够经过enc的man手册查看enc的详实用法,也足以透过enc -help的点子查注重要参数概要表达,如下

[email protected]:~$ openssl enc -help
unknown option '-help'
options are
-in <file>    input file
-out <file>    output file
-pass <arg>    pass phrase source
-e            encrypt
-d            decrypt
-a/-base64    base64 encode/decode, depending on encryption flag
-k            passphrase is the next argument
-kfile        passphrase is the first line of the file argument
-md            the next argument is the md to use to create a key
                from a passphrase.  One of md2, md5, sha or sha1
-S            salt in hex is the next argument
-K/-iv        key/iv in hex is the next argument
-[pP]          print the iv/key (then exit if -P)
-bufsize <n>  buffer size
-nopad        disable standard block padding
-engine e      use engine e, possibly a hardware device.
Cipher Types
...

[in/out]

那多个参数钦赐输入文件和出口文件,加密是输入文件是开诚相见,输出文件是密文;解密时输入文件是密文,输出文件是青天白日。

[pass]

点名密码的输入情势,共有八种情势:命令行输入(stdin卡塔尔(英语:State of Qatar)、文件输入(file卡塔尔(قطر‎、遇到变量输入(var卡塔尔国、文件陈说符输入(fd卡塔尔(英语:State of Qatar)、标准输入(stdin卡塔尔。暗中认可是标准输入,及从键盘输入。

[e/d]

e:加密, d:解密  默许是加密

[-a/-base64]

由于文件加密后是二进制方式,不实惠查看,使用该参数能够使加密后的始末通过base64编码,使其可读;相似,解密时索要先举行base64解编码,然后进行解密操作。

[-k/-kfile]

合营从前版本,钦点密码输入格局,现已被pass参数代替

[md]

内定密钥生成的摘要算法,顾客输入的口令不可能一直作为文件加密的密钥,而是通过摘要算法做调换,此参数钦点摘要算法,暗许md5

[-S]

为了增加安全性��在把客户密码转换来加密密钥的时候需求选择盐值,暗中同意盐值随机生成。使用该参数,则盐值由顾客钦定。也可指用-nosalt钦点不行使盐值,但下跌了安全性,不引入应用。

[K/IV]

私下认可文件的加密密钥的Key和IV值是有顾客输入的密码通过转变生成的,但也足以由顾客本人内定Key/IV值,那个时候pass参数不起成效

[pP]

丰盛p参数会打字与印刷文件密钥Key和IV值,加上P参数也会打字与印刷文件密钥Key和IV值,但不进行真正的加解密操作

[bufsize]

读写文件的I/O缓存,日常无需钦赐

[-nopad]

不行使补齐,那就必要输入的数码长度是利用加密算法的分组大小的倍数

[OpenSSL之对称加密算法命令详解,对称加密。engine]

内定三方加密设备,未有条件,暂不实验

3、对称加密算法使用示例

1、只对文件实行base64编码,而不选拔加解密

/*对文本进行base64编码*/
openssl enc -base64 -in plain.txt -out base64.txt
/*对base64格式文件举行解密操作*/
openssl enc -base64 -d -in base64.txt -out plain2.txt
/*应用diff命令查看可以知道解码前后明文相符*/
diff plain.txt plain2.txt

2、分裂方法的密码输入格局

/*命令行输入,密码123456*/
openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass pass:123456
/*文件输入,密码123456*/
echo 123456 > passwd.txt
openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass file:passwd.txt
/*情状变量输入,密码123456*/
passwd=123456
export passwd
openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass env:passwd
/*从文件描述输入*/
openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass fd:1 
/*从专门的职业输入输入*/
openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass stdin

3、固定salt值加密

[email protected]:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P
salt=32F5C360F21FC12D
key=D7E1499A578490DF940D99CAE2E29EB1
iv =78EEB538897CAF045F807A97F3CFF498
[email protected]:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P
salt=DAA482697BECAB46
key=9FF8A41E4AC011FA84032F14B5B88BAE
iv =202E38A43573F752CCD294EB8A0583E7
[email protected]:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P -S 123
salt=1230000000000000
key=50E1723DC328D98F133E321FC2908B78
iv =1528E9AD498FF118AB7ECB3025AD0DC6
[澳门新萄京官方网站,email protected]:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P -S 123
salt=1230000000000000
key=50E1723DC328D98F133E321FC2908B78
iv =1528E9AD498FF118AB7ECB3025AD0DC6
[email protected]:~$

能够见见,不应用-S参数,salt参数随机变化,key和iv值也屡屡更换,当slat值固定期,key和iv值也是一直的。

4、加解密后经过使用base64编解码

/*使用-a参数加密后选用base64编码*/
[email protected]:~$ openssl enc -aes-128-cbc -in plain.txt -a -out encrypt.txt -pass pass:123456
/*接收-a参数解密前应用base64解码*/
[email protected]:~$ openssl enc -aes-128-cbc -in encrypt.txt -d -a -out plain1.txt -pass pass:123456
/*文本风流倜傥律*/
[email protected]:~$ diff plain.txt plain1.txt
/*加密后文件使用了base64编码*/
[email protected]:~$ cat encrypt.txt
U2FsdGVkX19KbCj9GMI1TBOQjP8JJcefIUH1tHwf/Z4=

 5、手动钦定Key和IV值

/*手动钦点key和iv值,salt固定*/
[email protected]:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt  -K 1223 -iv f123 -p
salt=0B00000000000000
key=12230000000000000000000000000000
iv =F1230000000000000000000000000000
/*点名pass密码,不起功用,注意Key和IV值是16进制*/
[email protected]:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt  -K 1223 -iv f123 -p -pass pass:123456
salt=F502F4B8DE62E0E5
key=12230000000000000000000000000000
iv =F1230000000000000000000000000000

愈来愈多OpenSSL相关内容能够查看以下的有用链接: 

运用 OpenSSL 命令行营造 CA 及证书 

Ubuntu安装OpenSSL 

透过OpenSSL提供FTP SSL/TLS认证效用,并促成平安数据传输

Linux下行使OpenSSL生成证书

运用OpenSSL签定多域名证书

在OpenSSL中增加自定义加密算法 

OpenSSL 的详尽介绍:请点这里
OpenSSL 的下载地址:请点这里

正文永远更新链接地址:

1、对称加密算法概述 openssl的加密算法库提供了丰硕的集中大伙儿智慧加密算法,大家能够透过openssl提供的相得益彰加密算...


转发请表明出处:

enc(对称加密卡塔尔,opensslenc加密 对称加密工具。了然对称加密的法规后就很简短了,原理部分见下文。 openssl enc -ciphername [-in filename] [-...

对称加密工具。领会对称加密的原理后就超级轻巧了,原理部分见下文。

openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-k password] [-S salt] [-salt] [-md] [-p/-P]

选料说明:

-ciphername:钦赐对称加密算法(如des3卡塔尔(قطر‎,可独自于enc直接行使,如openssl des3或openssl enc -des3。推荐在enc后选择,那样不借助于于硬件

-in filename :输入文件,不点名时暗中认可是stdin

-out filename:输出文件,不内定期私下认可是stdout

-e:对输入文件加密操作,不指依期暗中认可正是该选拔

-d:对输入文件解密操作,只有突显钦定该选拔才是解密

-pass:传递加、解密时的公然密码。若验证具名时实用的公钥或私钥文件是被加密过的,则供给传递密码来解密。密码的格式见" style="color: #0000ff;">openssl 密码格式"

-k     :已被"-pass"取代,现在还保留是为了同盟老版本的openssl

-base64:在加密后和解密前开展base64编码或解密,不点名时私下认可是二进制。注意,编码不是加解密的风度翩翩局地,而是加解密前后对数码的格式"整理"

-a:等价于-base64

-salt:单向加密时行使salt复杂化单向加密的结果,此为暗中认可选项,且使用随机salt值

-S salt:不采取随机salt值,而是自定义salt值,但只好是16进制范围内字符的组合,即"0-9a-fA-F"的随意二个或八个结合

-p:打字与印刷加解密时salt值、key值和IV初始化向量值(也是复杂化加密的一种办法),解密时还输出解密结果,见后文示例

-P:和-p选项效能相通,可是打印时直接退出工具,不举办加密或解密操作

-md:钦点单向加密算法,暗中认可md5。该算法是拿来加密key部分的,见后文深入分析。

支撑的单向加密算法有:

-md4            to use the md4 message digest algorithm
-md5            to use the md5 message digest algorithm
-ripemd160      to use the ripemd160 message digest algorithm
-sha            to use the sha message digest algorithm
-sha1           to use the sha1 message digest algorithm
-sha224         to use the sha224 message digest algorithm
-sha256         to use the sha256 message digest algorithm
-sha384         to use the sha384 message digest algorithm
-sha512         to use the sha512 message digest algorithm
-whirlpool      to use the whirlpool message digest algorithm

扶助的集合思路和意见加密算法有:

-aes-128-cbc               -aes-128-cbc-hmac-sha1     -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-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-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-GCM             -id-aes128-wrap            -id-aes128-wrap-pad      
-id-aes192-GCM             -id-aes192-wrap            -id-aes192-wrap-pad      
-id-aes256-GCM             -id-aes256-wrap            -id-aes256-wrap-pad      
-id-smime-alg-CMS3DESwrap  -idea                      -idea-cbc                 
-idea-cfb                  -idea-ecb                  -idea-ofb                
-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

在给出openssl enc命令用法示例在此以前,先表明下对称加密和平解决密的原理和经过。

对称加解密时,它们利用的密码是完全相似的,比方"123456",但那是密码,且是公然密码,特别不安全,所以理应对此轻松密码实行理并答复杂化。最直白的措施是运用单向加密总结出明文密码的hash值,单向加密后新变化的密码已经相比安全(称之为密钥相比好卡塔尔(英语:State of Qatar),能够看作对称加密时的相辅而行密钥。此外,由于同风度翩翩单向加密算法对同生龙活虎明文密码的预计结果是完全后生可畏致的,那样解密时接收相通的单向加密算法就会计算出完全相仿的密钥,相当于解密时的对称密钥。要是想要更安全,还足以在对称加密后对加密文件进行重复编码,如应用"base64"、二进制或hex编码格局张开编码,但相应的在解密前就须要先解码,解码后技能解密。

故此,将对称加、解密的体制轻松总结如下:

对称加密体制:依照内定的单向加密算法,对输入的精通密码进行单向加密(默许是md5卡塔尔国,得到稳固长度的加密密钥,即对称密钥,再依据钦点的毛将安傅加密算法,使用对称密钥加密文书,最终重复编码加密后的文本。即单向加密公开密码结果作为对称密钥、使用对称密钥加密文书、对文本再一次编码。

对称解密机制:先解码文件,再依附单向加密算法对解密时输入的精通密码总计得到对称密钥,依此对称密钥对称解密解码后的公文。

之所以,解密进程中选取的解码方式、单向加密和对称加密算法都必需生机勃勃律,且输入的密码必得是无可反驳密码。但供给留意的一点是,解密时得以不点名salt,因为加密时利用的salt会记录下来,解密时可以读取该salt。

正如图所示,分别是加密和解密进度暗暗提示图。

澳门新萄京官方网站 2澳门新萄京官方网站 3

示例:

以加密/etc/fstab的备份文件/tmp/test.txt为例。

(1卡塔尔(英语:State of Qatar).首先测量试验openssl enc的编码成效。由于未钦赐密码选项"-k"或"-pass",所以独有只进行编码而不实行加密,由此也不会提示输入密码。

[root@xuexi tmp]# openssl enc -a -in test.txt -out test_base64.txt

[root@xuexi tmp]# cat test_base64.txt
CiMKIyAvZXRjL2ZzdGFiCiMgQ3JlYXRlZCBieSBhbmFjb25kYSBvbiBUaHUgTWF5
IDExIDA0OjE3OjQ0IDIwMTcKIwojIEFjY2Vzc2libGUgZmlsZXN5c3RlbXMsIGJ5
IHJlZmVyZW5jZSwgYXJlIG1haW50YWluZWQgdW5kZXIgJy9kZXYvZGlzaycKIyBT
ZWUgbWFuIHBhZ2VzIGZzdGFiKDUpLCBmaW5kZnMoOCksIG1vdW50KDgpIGFuZC9v
ciBibGtpZCg4KSBmb3IgbW9yZSBpbmZvCiMKVVVJRD1iMmE3MGZhZi1hZWE0LTRk
OGUtOGJlOC1jNzEwOWFjOWM4YjggLyAgICAgICAgICAgICAgICAgICAgICAgeGZz
ICAgICBkZWZhdWx0cyAgICAgICAgMCAwClVVSUQ9MzY3ZDZhNzctMDMzYi00MDM3
LWJiY2ItNDE2NzA1ZWFkMDk1IC9ib290ICAgICAgICAgICAgICAgICAgIHhmcyAg
ICAgZGVmYXVsdHMgICAgICAgIDAgMApVVUlEPWQ1MDUxMTNjLWRhYTYtNGMxNy04
YjAzLWIzNTUxY2VkMjMwNSBzd2FwICAgICAgICAgICAgICAgICAgICBzd2FwICAg
IGRlZmF1bHRzICAgICAgICAwIDAK

再以base64格式举办解码。

[root@xuexi tmp]# openssl enc -a -d -in test_base64.txt              

#
# /etc/fstab
# Created by anaconda on Thu May 11 04:17:44 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 /                       xfs     defaults        0 0
UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot                   xfs     defaults        0 0
UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap                    swap    defaults        0 0

实在,上述编码和平解决码的经过严俊地说也是对称加密和解密,因为openssl enc私下认可会带上加密选项"-e",只可是因为尚未点名输入密码选项,使用的加密密码为空而已,且单向加密算法使用的也是暗许值。解密时也长期以来。

(2卡塔尔国.测验使用des3对称加密算法加密test.txt文件。

[root@xuexi tmp]# openssl enc -a -des3 -in test.txt -out test.1 -pass pass:123456 -md md5

加密后,查看加密后文件test.1的结果。

[root@xuexi tmp]# cat test.1
U2FsdGVkX1 c/d4NsXnY6Pd7rcZjGSsMRJWQOP0s5sxH6aLE5iCYjKEAbGac//iR
wkUUh6a57OpUA3 OOCKB4z IxBcKo67BUDGR9vYeCfkobH9F mSfVzZbXBrJmxwf
921tJ 8K yKB6DjJfufpW DWXmH8MFyvK60wnYHsfUQOp81EvaUtEfqEKIS8hgg7
4NTOyww /VMDdc2wmkf08XNQUPlVtLaSx3vuBisxRdu8raiKWGGOB7qCwELCxDqu
NaRCIh0VjjffGohAOMMsAQ2kFCDUKx0Z4Df5fvifhPXoHfsj2lI216BPG5Cy88K2
KV78DoBm4pnMAymo/HRRF95LjvWYZIN88hIVN67u2j9zqSGeuyJakMyDVhYYmrHl
sMr2YTbTwus2DiO6qAzt/0a9nocTVKfGR81Xsh0a0ZudjtrMl5H36YJawpldvUCa
DzXPsbpQrp0VGi2HvJ4EVKKEx2uh8XYWmJ4ytj1s1wtCR6wQhmERtInGwULWTyI 
agXStSB5XzsvAJRJvexsaNycj5lAoQ8O6YXEj7B0inB7nBQTFbwkXyvJqXpr1179
i67leYc59OvlhRMA GLW4g/Mg5dN5SBmgt1ChOJs4887zAUyLYrLvR4zDK6IQN/M
P6F15c9V m9pw2t32sUQQmYrYqOV/AQf0t0EwvA0Myjmfqtvmp555Q==

解密文件test.1。

[root@xuexi tmp]# openssl enc -a -des3 -d -in test.1 -out test.2 -pass pass:123456 -md md5 

[root@xuexi tmp]# cat test.2

#
# /etc/fstab
# Created by anaconda on Thu May 11 04:17:44 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 /                       xfs     defaults        0 0
UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot                   xfs     defaults        0 0
UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap                    swap    defaults        0 0

(3卡塔尔.加密时带上点盐salt。其实不写时暗许就已经走入了,只然则是参与随机盐值。使用-S能够钦命鲜明要利用的盐的值。不过盐的值只好是16进制范围内字符的结合,即"0-9a-fA-F"的自由三个或多少个结合。

[root@xuexi tmp]# openssl enc -a -des3 -S 'Fabc' -in test.txt -out test.1 -pass pass:123456 -md md5    

解密。解密时毫无内定salt值,尽管内定了也不会潜移默解决密结果。      

[root@xuexi tmp]# openssl enc -a -des3 -d -in test.1 -pass pass:123456 -md md5               

#
# /etc/fstab
# Created by anaconda on Thu May 11 04:17:44 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 /                       xfs     defaults        0 0
UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot                   xfs     defaults        0 0
UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap                    swap    defaults        0 0

[root@xuexi tmp]# openssl enc -a -des3 -d -S 'Fabcxdasd' -in test.1 -pass pass:123456 -md md5

#
# /etc/fstab
# Created by anaconda on Thu May 11 04:17:44 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 /                       xfs     defaults        0 0
UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot                   xfs     defaults        0 0
UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap                    swap    defaults        0 0

(4卡塔尔.在测量试验下"-p"和"-P"选项的输出功效。小写字母p不独有输出密钥算法结果,还输出加解密的内容,而大写字母P则只输出密钥算法结果。

加密时的气象。

[root@xuexi tmp]# openssl enc -a -des3 -S 'Fabc' -in test.txt -out test.1 -pass pass:123456 -md md5 -p
salt=FABC000000000000
key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
iv =5128FDED01EE1499

在那之中key便是单向加密公开密码后收获的择善而从密钥,iv是密码运算时选择的向量值。

再看解密时的事态,此处加上了salt。

[root@xuexi tmp]# openssl enc -a -des3 -d -S 'Fabc' -in test.1 -pass pass:123456 -md md5 -P
salt=FABC000000000000
key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
iv =5128FDED01EE1499

若解密时不钦定salt,大概专擅内定salt,结果如下。

[root@xuexi tmp]# openssl enc -a -des3 -d -in test.1 -pass pass:123456 -md md5 -P         
salt=FABC000000000000
key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
iv =5128FDED01EE1499

[root@xuexi tmp]# openssl enc -a -des3 -S 'FabM' -d -in test.1 -pass pass:123456 -md md5 -P
salt=FABC000000000000
key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
iv =5128FDED01EE1499

足见,解密时,只要钦命和加密时同样编码格式和单向加密算法,密钥的结果就是同等的,且解密时鲜明内定salt是架空的,因为它能够读取到加密时行使的salt。

以至,解密时钦命差异的对称加密算法,密钥结果也是雷同的。

[root@xuexi tmp]# openssl enc -a -desx -d -in test.1 -pass pass:123456 -md md5 -p 
salt=FABC000000000000
key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D
iv =5128FDED01EE1499

透过,能推理出对称加密时利用的相辅而行密钥和对称算法是毫非亲非故系的。

本文由澳门新萄京官方网站发布于澳门新萄京官方网站,转载请注明出处:OpenSSL之对称加密算法命令详解,对称加密

关键词: