一、介绍
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
输入文件如果有密码保护,在这里输入密码。
1
2
3
4
5
6
7
8
|
-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
打印调试信息。
更多参数信息请参考:# openssl enc --help
例:使用openssl对/etc/fstab进行加密
加密前:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[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
|
加密:
1
|
[root@1inux ssl]# openssl enc -e -des3 -pass pass:1 -a -salt -
in
fstab -
out
fstab.des3
|
加密后文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[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]#
|
解密:
1
|
[root@1inux ssl]# openssl enc -d -des3 -pass pass:1 -a -salt -in fstab.des3 -out fstab.new
|
解密后
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[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、密钥分发
********************************************************
》》》》》》》》》》扩展 :单向加密《《《《《《《《《《《《《《《
单向加密:
主要用途:提取数据特征码
1
2
3
4
|
特性:
1
、定长输出:无论原来的数据是多大级别,其加密结果长度一样;
2
、雪崩效应:原始数据微小改变,将会导致结果巨大变化;
3
、不可逆:
|
算法:md5, sha1
工具:openssl dgst, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum
# openssl dgst -CIPHER /PATH/TO/SOMEFILE...
1
2
3
4
5
|
[root@1inux CA]# openssl dgst -sha256 index.txt
SHA256(index.txt)= 5a894d470ade08ff3379a5e8f4817fef115ee83f6bb854f59e2b50b1b317679f
[root@1inux CA]# sha256sum index.txt
5a894d470ade08ff3379a5e8f4817fef115ee83f6bb854f59e2b50b1b317679f index.txt
[root@1inux CA]#
|
MAC: 消息认证码,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性;
机制:
CBC-MAC
HMAC:使用md5或sha1算法
生成用户密码:
# openssl passwd -1 -salt 8bits随机数
1
2
3
4
|
[root
@1inux
CA
]
# openssl passwd -1 -salt 12345678
Password:
$1
$12345678
$XM4P3PrKBgKNnTaqG9P0T
/
[root
@1inux
CA
]
#
|
生成随机数:
# openssl rand -hex|-base64 NUM
1
2
3
4
5
6
7
8
9
|
[root
@1inux
CA
]
# openssl rand -hex 8
187b52f635ba0a03
[root
@1inux
CA
]
# openssl rand -hex 8
71585682fc67c452
[root
@1inux
CA
]
# openssl rand -base64 8
YHlapjLwL9I=
[root
@1inux
CA
]
# openssl rand -base64 8
MHG5PifRDLg=
[root
@1inux
CA
]
#
|
参考文献:http://blog.csdn.net/ligaoyang/article/details/6865711
http://www.cnblogs.com/AloneSword/p/3481126.html