文章目录
常见加密算法
编码
ASCII编码
用一个字节(7个或8个二进制位) 定义了128个字符 (96 个可打印字符, 32 个控制字符)
英语中用128个符号编码便可以表示所有
几个常见字母的ASCII码: “0-9”为 48-57; “A-Z”为65-90;“a-z”为97-122;
unicode编码
想要用固定字节, 将世界上所有的符号都纳入其中
- 缺点
英文用一个字节就够了,被迫用多个字节
UTF-8
根据不同的符号自动选择编码的长短, 英文用一个字节,汉字用两个
url编码
浏览器URL只能使用英文字母、阿拉伯数字和某些标点符号,
网址要使用汉字只能编码后使用
url编码其实就是一个字符ascii码的十六进制, 前面加上“%”
“\”的url编码就是%5c
Base32/64/58
基于32/64/58个可打印字符来表示二进制数据的方法
就是把 二进制 --转换为–> 字符
base32的编码表是由(A-Z、2-7)32个可见字符构成,“=”符号用作后缀填充。
base64的编码表是由(A-Z、a-z、0-9、+、/)64个可见字符构成,“=”符号用作后缀填充。
base58的编码表相比base64少了数字0,大写字母I,O,小写字母 l (这个是L),以及符号‘+’和‘/’
1234567
--base32编码–> GEZDGNBVGY3Q====
特征:大写字母和数字,不满5的倍数,用‘=’补齐。
1234567
--base64编码–> MTIzNDU2Nw==
特征:大小写字母和数字,不满3的倍数,用‘=’补齐。
1234567
--base58编码–> 2s8YYFs4Vc
算法 | 位数 | 加密后字符 | 特点/用途 |
---|---|---|---|
base16 | 原先的2倍 | 数字0-9,大写字母A-F | 就是16进制转ASCII |
base32 | 原先的8/5倍 | 大写字母(A-Z)数字234567 | 字符不足用“=”补齐 |
base64 | 转换后比原有的字符串长1/3 | 大写字母(A-Z),小写字母(a-z),数字(0-9)以及+/ | 字符不足用“=”补齐 |
ROT5 | 数字(0-9) | 只对数字进行编码,用当前数字往前数的第5个数字替换当前数字:0>5, 1>6 |
对称加密算法
使用同一套密钥进行加密和解密
P:明文
C:密文
DES
- 参数
- 密钥key 7个字节(56位)
- 数据data 8个字节(64位)
- 加密方法EncodeKey
C=Ek( P ) - 解密方法DecodeKey
P=Dk( C )
3DES
- 参数
- 密钥 3个7字节的key
- 加密方法
C=Ek3( Dk2( Ek1( P ) ) ) - 解密方法
P=Dk1( EK2( Dk3( C ) ) )
SM1
国密 硬件实现
SM4
国密 软件实现
AES
密钥名称128、192、256位
RC5
IDEA
Blowfish
非对称加密算法
每个密码以私钥(secret key)和公钥(public key)成对出现,
公钥加密,私钥解密,反之亦然
相对于对称加密,速度很慢,一般不用于加密,而是秘钥交换
SM2
国密
RSA
Rabin
El Gamal
椭圆曲线算法(ECC)
摘要算法/ 单向加密/ 散列加密/ 哈希算法
只能加密不能解密
MD5
输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符)
由数字“0-9”和字母“a-f”所组成的字符串
- 每次加密后的密文其实都是一样的,这样就方便了MD5通过大数据的方式进行破解。
SM3
国密
MAC
带秘密密钥的Hash函数
兼容了MD和SHA算法的特性,并在此基础上加上了密钥
SHA-1
40个字符
SHA-2(SHA-224、SHA-256、SHA-384,和SHA-512)
SHA-3
SCrypt算法
核心思想是“哈希计算需要更大的内存空间和时长”
追求更大的内存消耗和计算时间,以有效阻止ASIC专用矿机。
BCrypt 算法
生成的密文是60位
主要是能实现每次加密的值都是不一样