码迷,mamicode.com
首页 > 其他好文 > 详细

Openssl 之 enc 详解

时间:2015-04-23 08:22:04      阅读:3411      评论:0      收藏:0      [点我收藏+]

标签:openssl   salt   enc   

一、介绍

    enc - 对称加密例程,使用对称密钥对数据进行加解密,特点是速度快,能对大量数据进行处理。算法有流算法和分组加密算法,流算法是逐字节加密,数据经典算法,但由于其容易被破译,现在已很少使用;分组加密算法是将数据分成固定大小的组里,然后逐组进行加密,比较广为人知的是DES3。分组算法中又有ECB,CBC,CFB,OFB,CTR等工作模式,其中默认选CBC工作模式。


二、语法格式

           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
      输入文件如果有密码保护,在这里输入密码。

-pass 提供了几种传入密码的方式。传统是利用-k 选项传入密码的。

-pass pass:"123"      #密码是123  
-pass pass:123        #密码是123  
-pass evn:VAR         #密码从环境变量VAR中去  
-pass file:p.txt      #密码从文件p.txt第一行取,不包括换行符,注意DOS格式的^M及回车符。  
-pass fd:3            #密码从文件描述符3中读  
-pass stdin           #标准输入

    -salt
     加盐,这是开启的默认选项,使用-nosalt已明确关闭此选项,除非为了兼容性的考虑,否则在新程序中请使用此选项。这是一个神奇的选项,加盐后,相同的明文可以得到不同的密文。默认情况下,盐值是随机生成的,可以使用-S选项明确指定盐值。   

    有了盐值后,相同的明文可以产生不同的密文并在密文中包含了盐值

    -nosalt
      和salt对应不加盐 
    -e
     加密  一个缺省会set的option, 把输入数据加密。 
    -d
      解密输入数据。
    -a
      用base64编码处理数据。set了这个option表示在加密之后的数据还要用  base64编码捏一次,解密之前则先用base64编码解码。
    -k password
     一个过时了的项,为了和以前版本兼容。现在用-key代替了。
    -kfile filename
      同上,被passin代替。
    -K key
      以16进制表示的密码。
    -iv IV
       作用完全同上。
    -p
       打印出使用的密码。
    -P
       作用同上,但打印完之后马上退出。
    -bufsize number
       设置I/O操作的缓冲区大小
    - debug
       打印调试信息。


算法
除了上面提到的des3外,openssl还包含其他算法
# openssl enc --help
 
base64             Base 64  
  
bf-cbc             Blowfish in CBC mode  
bf                 Alias for bf-cbc  
bf-cfb             Blowfish in CFB mode  
bf-ecb             Blowfish in ECB mode  
bf-ofb             Blowfish in OFB mode  
  
cast-cbc           CAST in CBC mode  
cast               Alias for cast-cbc  
cast5-cbc          CAST5 in CBC mode  
cast5-cfb          CAST5 in CFB mode  
cast5-ecb          CAST5 in ECB mode  
cast5-ofb          CAST5 in OFB mode  
  
des-cbc            DES in CBC mode  
des                Alias for des-cbc  
des-cfb            DES in CBC mode  
des-ofb            DES in OFB mode  
des-ecb            DES in ECB mode  
  
des-ede-cbc        Two key triple DES EDE in CBC mode  
des-ede            Two key triple DES EDE in ECB mode  
des-ede-cfb        Two key triple DES EDE in CFB mode  
des-ede-ofb        Two key triple DES EDE in OFB mode  
  
des-ede3-cbc       Three key triple DES EDE in CBC mode  
des-ede3           Three key triple DES EDE in ECB mode  
des3               Alias for des-ede3-cbc  
des-ede3-cfb       Three key triple DES EDE CFB mode  
des-ede3-ofb       Three key triple DES EDE in OFB mode  
  
desx               DESX algorithm.  
  
gost89             GOST 28147-89 in CFB mode (provided by ccgost engine)  
gost89-cnt        `GOST 28147-89 in CNT mode (provided by ccgost engine)  
  
idea-cbc           IDEA algorithm in CBC mode  
idea               same as idea-cbc  
idea-cfb           IDEA in CFB mode  
idea-ecb           IDEA in ECB mode  
idea-ofb           IDEA in OFB mode  
  
rc2-cbc            128 bit RC2 in CBC mode  
rc2                Alias for rc2-cbc  
rc2-cfb            128 bit RC2 in CFB mode  
rc2-ecb            128 bit RC2 in ECB mode  
rc2-ofb            128 bit RC2 in OFB mode  
rc2-64-cbc         64 bit RC2 in CBC mode  
rc2-40-cbc         40 bit RC2 in CBC mode  
  
rc4                128 bit RC4  
rc4-64             64 bit RC4  
rc4-40             40 bit RC4  
  
rc5-cbc            RC5 cipher in CBC mode  
rc5                Alias for rc5-cbc  
rc5-cfb            RC5 cipher in CFB mode  
rc5-ecb            RC5 cipher in ECB mode  
rc5-ofb            RC5 cipher in OFB mode  
  
aes-[128|192|256]-cbc  128/192/256 bit AES in CBC mode  
aes-[128|192|256]      Alias for aes-[128|192|256]-cbc  
aes-[128|192|256]-cfb  128/192/256 bit AES in 128 bit CFB mode  
aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode  
aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode  
aes-[128|192|256]-ecb  128/192/256 bit AES in ECB mode  
aes-[128|192|256]-ofb  128/192/256 bit AES in OFB mode


例:

  加密前:

[root@1inux ssl]# cat fstab 

#
# /etc/fstab
# Created by anaconda on Thu Mar 26 20:01:38 2015
#
# 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
#
/dev/mapper/vg0-root    /                       ext4    defaults        1 1
UUID=0d0698ff-1645-4ff8-af27-fc6e73573941 /boot                   ext4    defaults        1 2
/dev/mapper/vg0-usr     /usr                    ext4    defaults        1 2
/dev/mapper/vg0-var     /var                    ext4    defaults        1 2
/dev/mapper/vg0-swap    swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

    加密:

[root@1inux ssl]# openssl enc -e -des3 -pass pass:1 -a -salt -in fstab -out fstab.des3

    加密后文件

[root@1inux ssl]# cat fstab.des3 
U2FsdGVkX1/XypmPFRgpK3Gr+nZeWqIUS0IRDEDOFOOj3ZKbhlOmpcNQf7t37xSa
P6pho1z+u3AZc9H3bgp6savgny7X0ud3SjcQL5nd1/Tk+h9GEVH52B5Btg8gwDpM
W9XDFQk+eAL4ZYxYuZVdyxu6ppQ6UEjxLV4LiXcfGAoGu7XDgrcpG0vEojYfWoNS
xy8jkXOY7LW4dLi2wdlWBh3H9dcaJDmx96RhvFkrHEFOR2dMdRplEoh9BCX75MuC
j2I73zNjku7Ig8WDABfZXLWqiQoA9107AsiXCgfQ2KRLFzWFB6wFFaaN/HF3Raht
WtQNI13IYUuDIzg8xtJq+g3om3TKwFsX8EX75LrrKLPrgH3PENvycyzqEHbRwfE4
EOg8PHSqnV4NCkOH58vhazMlG/79h2XW29K0+t2WN5EdJevTSB/59i3D3QMQEuUs
1pPz9xKDg6csDy+qTVJCz2B+44cEi3eOC2k5f8T06WiDw6kvMkl7YfpkjJ0CXviT
cDcOLWIn+sOMoKnZBoFIoLVk2cF6rs5S0d6gj22FBydRNMVfAA/0o6pR1cX99lbC
mhVem2pCD2oC0ZG8yFI7iUFc94ctWCzaiR4eGWSrT7TLNkzuiNxpPSqM+O8l5rYc
hb7GXTjCS+s5NVIkZy6Wi27HmfZOJw0DuPFvgvBlcWRzlu4KwNF+RRdZ7gWY4s12
n/ymOUNEEcesrrCnADwjcLmdtMzzgF9s09IRLH6S5gmlM1oYjD+J8neRKBE53xKS
+YyWJkW/LW36BNkoXG7Wq+W/fHNOGmPbHBoGgqCT7tguycfuLWCqNYOtq6zJlUCj
70Ip6MQ55nGi3JoD4HLl865u0thPbuuIMrbxdvcSmkL11LpQSKiHl4zANAeEkDe8
tEmVSbisYWMTmKnxrJAoSp6L5+jApiBXtLJsxd5/6BtsVFk5qokpiuLW0evs0Y5q
Jrf2bCuKXDdCLVWHkjFX7QnHNP5XEkEy5Wfa6nnru2C5mvWhtE2703YkjvDD7LPF
kvIj2mIG+/vi9AIcU3Foi1wA2gDYW+8y/IV5t5/oFuEcFqdSVZaOc4HEsEIBy3+B
oJfDFkmXo5o3EfGFKetYlh6Db7TGd4fuP3iydHNnw92q1QWWZuETK1iL6SHXppRr
pg71NwIWzASIvg+XEVIA/4KBbED9htIjZu1Did209pVjIrS0eIJqyqoB4pZHjUsj
yLfeG34SpKHDWvCPHLF/pITmQHeDFMFeyBfFtWZGEsQ=
[root@1inux ssl]#

    解密:

[root@1inux ssl]# openssl enc -d -des3 -pass pass:1 -a -salt -in fstab.des3 -out fstab.new

    解密后

[root@1inux ssl]# cat fstab.new 

#
# /etc/fstab
# Created by anaconda on Thu Mar 26 20:01:38 2015
#
# 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
#
/dev/mapper/vg0-root    /                       ext4    defaults        1 1
UUID=0d0698ff-1645-4ff8-af27-fc6e73573941 /boot                   ext4    defaults        1 2
/dev/mapper/vg0-usr     /usr                    ext4    defaults        1 2
/dev/mapper/vg0-var     /var                    ext4    defaults        1 2
/dev/mapper/vg0-swap    swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@1inux ssl]#


*********************************************************

对称加密:加密和解密使用同一个密钥
        依赖于:算法和,密钥
            安全性依赖于密钥,而非算法
        常见算法:
            DES:Data Encryption standard,56bits (IBM研究员研发出来的)【使用56位秘钥】
            3DES:重新设计的另一种算法 不同于DES
            AES:Advanced Encrpytion Standard 【秘钥有多重变化 128bits,192,256,512】
            (AES 可变化的 可自动选择长度) 【目前常用】
            Blowfish:
            Twofish:
            IDEA:商业
            RC6
            CAST5
        特性:
            1、加密、解密使用同一密钥
            2、将明文分割成固定大小的块,逐个进行加密;
        缺陷:
            1、密钥过多:
            2、密钥分发


********************************************************


参考文献:http://blog.csdn.net/ligaoyang/article/details/6865711

          http://www.cnblogs.com/AloneSword/p/3481126.html

本文出自 “无常” 博客,请务必保留此出处http://1inux.blog.51cto.com/10037358/1637396

Openssl 之 enc 详解

标签:openssl   salt   enc   

原文地址:http://1inux.blog.51cto.com/10037358/1637396

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!