加密可以分为对称加密非对称加密。两者的主要区别就是是否使用同一个秘钥,对称加密需要用同一个秘钥。非对称加密不需要用同一个秘钥,而是需要两个秘钥:公开密钥(publickey)和私有密钥(privatekey),并且加密密钥和解密密钥是成对出现的。


对称加密算法

对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。

不足之处是,交易双方都使用同样钥匙,安全性得不到保证。

常见的对称加密有DES,3DES,AES,Blowfish,Twofish,IDEA,RC6,CAST5 等。


非对称加密算法

密钥是成对出现。使用一对“私钥-公钥”,用私钥加密的内容只有对应公钥才能解开

常见的非对称加密有 RSA、ESA、ECC 等。

 公钥:公开给所有人。不能通过公钥反推出私钥;public key

 私钥:自己留存,不公开。有且只有一个对应的私钥;secret key

 特点:通过私钥加密的密文只能通过公钥能解密,通过公钥加密的密文也只能通过私钥能解密。

但由于算法强度比对称加密复杂,加解密的速度比对称加解密的速度要慢。


来查看本机系统中ssh中的密钥都长啥样呢。pub结尾的就是公钥,key结尾的就是私钥

#ls /etc/ssh/

ssh_host_dsa_key.pub  ssh_host_key.pub  ssh_host_rsa_key.pub

ssh_config  ssh_host_dsa_key  ssh_host_key          ssh_host_rsa_key


查看系统中密码加密算法

#authconfig --test|grep password

shadow passwords are enabled

password hashing algorithm is sha512


常见加密算法工具

md5: 128bits、 sha1: 160bits、 sha224

sha256、 sha384、 sha512


 常用工具

md5sum

sha1sum

sha512sum

openssl

gpg

• rpm -V

需要先导入光盘中的GPG-KEY:

#rpm --import /dvd/RPM-GPG-KEY-CentOS-6

或安装好的系统的

#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#rpm -K /dvd/Packages/kernel-2.6.32-696.el6.x86_64.rpm

/dvd/Packages/kernel-2.6.32-696.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK


可以利用加密算法对文件进行计算以便发现是否被篡改

md5sum --check 保存的计算结果文件

#sha512sum --check file.sum

b: FAILED

sha512sum: WARNING: 1 of 1 computed checksum did NOT match


使用gpg实现对称加密与解密

 对称加密file文件

#gpg -c sshd_config

安全与加密-使用gpg和openssl实现加密与解密_第1张图片

输入2次密码之后,会生成一个sshd_config.gpg


#file sshd_config.gpg

sshd_config.gpg: data


解密此加密过的file,输入正确的密码即可

-o 是指定输出位置,必须放在前面。

#gpg -o /tmp/sshd -d sshd_config.gpg


使用gpg工具实现非对称公钥加密与解密


#gpg --gen-key

gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want: 选择加密方式

(1) RSA and RSA (default)

(2) DSA and Elgamal

(3) DSA (sign only)

(4) RSA (sign only)

Your selection? 1

RSA keys may be between 1024 and 4096 bits long.选择加密长度

What keysize do you want? (2048) 默认回车

Requested keysize is 2048 bits

Please specify how long the key should be valid.选择密钥有效期

0 = key does not expire

 = key expires in n days

w = key expires in n weeks

m = key expires in n months

y = key expires in n years

Key is valid for? (0) 1y

Key expires at Sun 13 Jan 2019 08:02:46 PM CST

Is this correct? (y/N) y 是否确认以上信息

GnuPG needs to construct a user ID to identify your key.

Real name: gpg 保存一个名字

Name must be at least 5 characters long 至少需要5个字符

Real name: gpg-key-a

Email address: [email protected] 邮件地址

Comment:  备注

You selected this USER-ID:

"gpg-key-a "

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O 保存是O

再接输入2次密码

然后,加密过程就根据加密长度,会让你随机输入字符,总这就是你不断的敲东西啦。可以开多个终端窗口,批量发送信息。挺有意思的。

这个操作在图形界面下只需要动动鼠标就好了

安全与加密-使用gpg和openssl实现加密与解密_第2张图片

生成了一对密钥。

#ls ~/.gnupg/

gpg.conf  private-keys-v1.d  pubring.gpg  pubring.gpg~  random_seed  secring.gpg  trustdb.gpg

pubring.gpg 公钥

secring.gpg 私钥

#gpg -k

/root/.gnupg/pubring.gpg

------------------------

pub   2048R/4CBA6F6A 2018-01-13 [expires: 2019-01-13]

uid                  gpg-key-a

sub   2048R/215FAF14 2018-01-13 [expires: 2019-01-13]


导出公钥

#gpg -a --export -o gpg-a-pubkey


在另外一个系统导入公钥

#gpg --import gpg-a-pubkey

#gpg -k   能看到导入的公钥

/root/.gnupg/pubring.gpg

------------------------

pub   2048R/4CBA6F6A 2018-01-13 [expires: 2019-01-13]

uid                  gpg-key-a

sub   2048R/215FAF14 2018-01-13 [expires: 2019-01-13]


加密文件

#gpg -e -r gpg-key-a gpg.conf     -r 是指定加密的公钥名


回到导出公钥的主机,执行解密

#gpg -d gpg.conf.gpg

安全与加密-使用gpg和openssl实现加密与解密_第3张图片

成功


OpenSSL

开源项目

三个组件:

openssl: 多用途的命令行工具,包openssl

libcrypto: 加密算法库,包openssl-libs

libssl:加密模块应用库,实现了ssl及tls,包nss,openssl命令:

两种运行模式:交互模式和批处理模式

直接使用openssl回车进入交互模式,输入?列出命令菜单。

命令分为:

标准命令Standard commands

消息摘要命令Message Digest commands

加密命令Cipher commands

openssl命令

帮助:man enc ,man dgst

对称加密

语法:

openssl enc

常用选项有:

-in filename: 指定要加密的文件存放路径

-out filename: 指定加密后的文件存放路径

-salt: 自动插入一个随机数作为文件内容加密,默认选项

-e: 可以指明一种加密算法,若不指的话将使用默认加密算法。支持的算法在man中

-d: 解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的 算法一致

-a/-base64: 使用-base64位编码格式

示例

#openssl enc -e -des3 -a -in issue -out issue.des3

enter des-ede3-cbc encryption password:

Verifying - enter des-ede3-cbc encryption password:

#ll

-rw-r--r-- 1 root root 33 Jan 14 16:11 issue

-rw-r--r-- 1 root root 78 Jan 14 16:25 issue.des3

#cat issue.des3

U2FsdGVkX1+eOWAl9ZWtfyLzZY/4+256W1QduATECmFFuhYhc9pX2HZAe9AQ9l/o

K3aVnlttg4s=

解密

#openssl enc -d -des3 -a -in issue.des3 -out issue2

单向加密:

openssl dgst

常用选项有:

-out filename: 将加密的内容保存到指定文件中

示例

#openssl dgst issue   默认是MD5

MD5(issue)= 1ad7bcb8447ccaaeb490feea29c6f6df

#openssl dgst -sha512 issue

生成用户密码:

openssl passwd

帮助:man sslpasswd

常用选项

-salt string:加入随机数,最多8位随机数

-in file:对输入的文件内容进行加密

-stdion:对标准输入的内容进行加密

openssl passwd -1 -salt SALT(最多8位)

openssl passwd -1 –salt centos

生成随机数:

openssl rand

帮助:man sslrand

openssl rand -base64 NUM

NUM: 表示字节数

生成密钥对:

openssl genrsa

帮助:man genrsa

openssl rand -base64 NUM

NUM: 表示字节数

#openssl genrsa -out issue.key -des3 2048  

#(umask 066;openssl genrsa -out issue.key -des3 2048)  使用这绿色的参数是非对称加密

生成后必须放到一个安全的地方,并且修改权限不让其他人查看

使用非对称加密后的key会有这些字样:Proc-Type: 4,ENCRYPTED

将加密key解密

#openssl rsa -in issue.key -out issue.key2

从私钥中提取出公钥

常用选项:

-in filename:指明私钥文件

-out filename:指明将提取出的公钥保存至指定文件中

-pubout:根据私钥提取出公钥

#openssl rsa -in issue.key -pubout -out issue.key.pub

cat issue.key.pub

-----BEGIN PUBLIC KEY-----




总结,用你的公钥来加密文件,只有你的私钥才能解密。安全性提高。