最近准备软考,需要了解网络安全,网上资料较多,比较零散,本文进行了一下整理
一、数字签名
首先要明白的是数字证书签名跟常说的加密算法是两回事。关于数字证书,概念请参照其他博客。
概念介绍博客:https://www.cnblogs.com/zedosu/p/6558290.html
二、加解密算法
-
摘要算法
(1)MD5
MD5
用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5
不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5
都会输出长度为 128bits
的一个串 (通常用 16
进制 表示为 32
位 128/4=32, 4位二进制数用16进制表示为1位)。
MD5加盐:为了防止黑客通过彩虹表根据哈希值反推原始口令,在计算哈希的时候,不能仅针对原始输入计算,需要增加一个salt来使得相同的输入也能得到不同的哈希,这样,大大增加了黑客破解的难度。
如果salt是我们自己随机生成的,通常我们计算MD5时采用md5(message + salt)
。但实际上,把salt看做一个“口令”,加salt的哈希就是:计算一段message的哈希时,根据不同口令计算出不同的哈希。要验证哈希值,必须同时提供正确的口令。
(2) SHA-1
SHA1 是和 MD5 一样流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更强。对于长度小于 2 ^ 64 位的消息,SHA1 会产生一个 160 位的 消息摘要。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性 以及 数字签名 等场景。
(3) HMAC
(4)SM3
SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
2.加密算法
(1)对称加密
-
DES
-
AES
-
3DES
-
RC-5
-
SM1
我想把一些答案总结成一篇文章。 首先,不要将MD5哈希视为字符串,而是将其视为十六进制数。因此,每个数字都是十六进制数字(0-15或0-F),表示四位,而不是八位。 进一步地,一个字节或八个比特由两个十六进制数字表示,例如, b'1111 1111
'= 0xFF
= 255
。 MD5哈希长度为128位,通常由32个十六进制数字表示。 SHA-1哈希长度为160位,通常用40个十六进制数字表示。 对于SHA-2系列,我认为哈希长度可以是预先确定的集合之一。因此SHA-512可以用128个十六进制数字表示。 同样,这篇文章仅基于之前的答案。