HEX编码

简介: HEX编码

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}")
目录
相关文章
|
3月前
扩展ASCII编码(Extended ASCII或8-bit ASCII)
扩展ASCII编码(Extended ASCII或8-bit ASCII)
791 5
|
3月前
|
网络协议
ASCII编码
ASCII编码
43 1
|
3月前
火山中文编程 -- HEX编码与BASE64编码
火山中文编程 -- HEX编码与BASE64编码
32 0
使用base64对图片进行编码、对byte[]进行编码
使用base64对图片进行编码、对byte[]进行编码
63 0
C#使用base64对字符串进行编码和解码的测试
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
C#使用base64对字符串进行编码和解码的测试
|
存储 编解码 数据安全/隐私保护
[oeasy]python0017_解码_decode_字节序列_bytes_字符串_str
[oeasy]python0017_解码_decode_字节序列_bytes_字符串_str
100 0
[oeasy]python0017_解码_decode_字节序列_bytes_字符串_str
|
存储 算法 Java
【字符编码】字符编码 && Base64编码算法
  在前面的解决乱码的一文中,只找到了解决办法,但是没有为什么,说白了,就是对编码还是不是太熟悉,编码问题是一个很简单的问题,计算机从业人员应该也必须弄清楚,基于编码的应用有Base64加密算法,然后,这个问题一直放着,想找个机会解决。于是乎,终于逮到机会,开始下手。
201 0
【字符编码】字符编码 && Base64编码算法
ZCMU - 2004: HEX
ZCMU - 2004: HEX
71 0
怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?
String s1 = "你好"; String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");
1497 0