# 编码混淆
# base 系列
# base64
以目前来看,最为常见的是 base64,结尾一般来讲都有一到 2 个等号,明文过短的时候就没有。
js 端 (base64):
// 明文:123 | |
btoa('123'); | |
// 密文:'MTIz' | |
// 解密 | |
atob('MTIz'); |
python 端:
import base64 | |
test_str = '123' | |
encode_str = base64.encodebytes(b'123') | |
#编码 | |
print(encode_str.decode()) | |
#解码 | |
decode_str = base64.decodebytes(encode_str) | |
print(decode_str.decode()) |
这里要输入加密字符串的二进制码,然后其输出的结果也是一个二进制码,要对其进行一个 decode () 操作。
# Unicode 编码
以 \u
、 &#
或 &#x
开头,后面是数字加字母组合。
# 算法加密
# MD5
本质上是一种信息摘要算法,对应关系为 n 对 1,也就是不同的数有相同的加密结果,但是一个数只会有唯一的加密值。密文一般是 16 或 32 位。
md5 加密特征:
- 0123456789ABCDEF、0123456789abcdef 的出现
- 1732584193、-271733879、-1732584194、271733878 的出现
至于为什么会有上述特征,后面在研究。
import hashlib | |
m = hashlib.md5(b'123').hexdigest() | |
print(m) | |
#202cb962ac59075b964b07152d234b70 |
# SHA 系列
比 md5 长一些。
import hashlib | |
m = hashlib.sha1(b'123').hexdigest() | |
print(m) | |
#40bd001563085fc35165329ea1ff5c5ecbdbbeef |
# HMAC 系列
据说是在 md5、sha 系列的基础上引入秘钥。
import hmac | |
m = hmac.new(b'key', b'123', digestmod='MD5').hexdigest() | |
print(m) | |
#52851cb05258c8d98da1672d95729e53 | |
n= hmac.new(b'key', b'123', digestmod='SHA1').hexdigest() | |
print(n) | |
#d4a5b6721d75a5ac15ec698818c77fe1f6e40187 |
# RSA 加密
非对称加密,使用公钥加密,然后用私钥解密,私钥加密的,可以用公钥解密。
import rsa | |
def rsaEncrypt(text): | |
# 生成 512 位公钥、私钥 | |
(pubkey, privkey) = rsa.newkeys(512) | |
print(f'公钥{pubkey},私钥{privkey}') | |
crypto = rsa.encrypt(text.encode('utf-8'), pubkey) | |
return (crypto, privkey) | |
def rsaDecrypt(text, key): | |
return rsa.decrypt(text,key).decode('utf-8') | |
text,pk = rsaEncrypt('123') | |
print('密文',text,pk) | |
content= rsaDecrypt(text, pk) | |
print('明文', content) |
在 js 中,有一个明显的特征就是设置公钥。