安全加密算法

MD5 算法
MD5 消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个 128 位(16 字节)的散列值(hash value),用于确保信息传输完整一致。MD5 由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于 1992 年公开,用以取代 MD4 算法。
SHA1 算法
SHA1 又被称为安全哈希算法(Secure Hash Algorithm)对于长度小于 2^64 位的消息,SHA1 会产生一个 160 位的消息摘要,比 MD5 多了 32 位,更安全,但其处理速度比 MD5 慢。
使用 openssl dgst、md5sun 和 sha1sum 来计算一个文件的 Hash 值。
MD5
安全加密算法
SHA1
安全加密算法

DES 全称为 Data Encryption Standard,又称为美国数据加密标准,是一种使用密钥加密的块算法,是 1972 年美国 IBM 公司研制的对称密码*加密算法。

DES 加密算法是对密钥进行保密,而公开算法,包括加密和解密算法,只有掌握了和发送方相同密钥的人才能解读由 DES 加密算法加密的密文数据。

可以使用 man enc 查看此命令的帮助信息。(前面提到的 man openssl 也可以查看帮助手册,但是里面有太多我们暂时不需要的信息,使用 man enc 可以只查看 openssl enc 这个子命令的帮助信息)

其中的内容非常多,我们选择其中几个选项给大家讲解一下。

-in filename:指定要加密的文件存放路径
-out filename:指定加密后的文件存放路径
-e:加密,这是一个默认选项,可以不指定;
-d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致;
-ciphername:指定加密方式。
安全加密算法

AES 算法简介
AES 加解密
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称 Rijndael 加密法,是美国联邦*采用的一种区块加密标准。它比 DES 速度更快,更安全,被用来替代 DES。
我们经常会听到 AES128,AES192,AES256 ,其实意思是支持不同长度密钥的 AES 算法。


encode
安全加密算法
decode
安全加密算法
cbc 代表的是工作模式,在解密时也要用相同的工作模式解密,不然会报错,如下图:

用 openssl enc --help 查看帮助,可以看到如下部分内容:

图片描述

可以看到对于 aes-128 而言,有 cfb、cfb1、ctr、ofb、cbc、ecb 等工作模式。

可以使用下面的命令将每个工作模式都试一试,对比看一下有什么不同。

只列出了五种工作模式,其他的可以类比

openssl enc -aes-128-cfb -in aes.txt -out cfb.bin

openssl enc -aes-128-cfb1 -in aes.txt -out cfb1.bin

openssl enc -aes-128-ctr -in aes.txt -out ctr.bin

openssl enc -aes-128-cbc -in aes.txt -out cbc.bin

openssl enc -aes-128-ecb -in aes.txt -out ecb.bin
copy
用 cat 查看加密过后的密文,比如使用 cfb 工作模式后加密的文件,其查看方式为 cat cfb.bin。
通过 openssl enc 子命令对测试文件进行 AES 加解密,理解了对称加密特点以及 AES 加密的安全性,AES 比 DES 更加安全,并且支持不同长度的密钥。我们之前说过衡量对称算法优劣的主要尺度是其密钥的长度。
安全加密算法
RSA 算法简介
非对称加解密过程
RSA 加密算法是一种非对称加密算法。在公开密钥加密和电子商业中 RSA 被广泛使用。RSA 是 1977 年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。

下图表示非对称加解密过程,通过下图试着回忆一下之前所学的内容。
安全加密算法
接下来就是使用 openssl 生成一个 2048 位的私钥 private.pem:
openssl genrsa -out private.pem 2048
来查看一下私钥的内容:
安全加密算法
根据私钥生成公钥 public.pem :
openssl rsa -in private.pem -pubout -out public.pem
来查看一下公钥的内容:
安全加密算法

方式一:公钥加密,私钥解密

用公钥加密
用公钥对 message.txt 加密,输出密文到 enc.txt 文件中:

openssl rsautl -encrypt -in message.txt -pubin -inkey public.pem -out enc.txt
copy
接下来可以使用 cat enc.txt 来看一下加密之后的信息长什么样,结果如下图:

安全加密算法

用私钥解密
用私钥对 enc.txt 进行解密,输出到 dec.txt 文件中:

openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
copy
接下来可以使用 cat dec.txt 来看一下解密之后的信息长什么样,结果如下图:

安全加密算法

用一幅图对这个过程进行总结:

安全加密算法

方式二:私钥加密,公钥解密
用私钥签名
用私钥 private.pem 对 message.txt 进行签名,输出到 sign.bin 中:

openssl rsautl -sign -in message.txt -inkey private.pem -out sign.bin
copy
安全加密算法

用公钥验证
用公钥 public.pem 对签名 sign.bin 进行验证,输出到 dec.txt 中:

openssl rsautl -verify -in sign.bin -pubin -inkey public.pem -out dec.txt
安全加密算法