HEX编码
- 编码对象:ascill字符
- 原理:
- Hex编码的原理就是将原来8位的二进制字节打断,分成两个4位的,并且在前面加上4个零
进行补位这样一个8位二进制字节就变成了2个8位的二进制字节,在将新得到的2个二进制字符进行16位进制转换
得到的新的16位字符串就是Hex的值,所以 二进制的[72, 69, 88] 《hex》 484558是相等的
- 特点:
- 编码后的字符串范围是0-9,a-f
- 编码后的字符串长度是2的倍数
- 代码
import re def encrypt_hex(string): ciphertext = "" lis = [] for i in string: if ord(i) > 127: return -1 lis.extend(re.findall("\d{4}",("0"*8+bin(ord(i))[2::])[-8::])) for i in lis: ciphertext += hex(int(i,2))[2::] return ciphertext def decrypt_hex(string): plaintext = "" # 个数一定是2的倍数 if len(string) % 2 != 0: return -1 lis = re.findall(".{2}", string) for i in lis: # 判断字符是0-f if ord(i[0]) < ord("0") or ord(i[0]) > ord("f") or ord(i[1]) < ord("0") or ord(i[1]) > ord("f"): return -1 plaintext += chr(int(i[0],16)*16+int(i[1], 16)) #plaintext += chr(int(("0"*4+bin(int(i[0],16))[2::])[-4::]+("0"*4+bin(int(i[1],16))[2::])[-4::],2)) return plaintext if __name__ == '__main__': ciphertext = encrypt_hex("I love you") plaintext = decrypt_hex(ciphertext) print(f"{plaintext}: {ciphertext}")