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}")
目录
相关文章
|
6月前
扩展ASCII编码(Extended ASCII或8-bit ASCII)
扩展ASCII编码(Extended ASCII或8-bit ASCII)
1564 5
|
6月前
|
网络协议
ASCII编码
ASCII编码
184 1
|
6月前
|
算法 Java 索引
Byte Hex CRC计算笔记
Byte Hex CRC计算笔记
75 0
|
JavaScript 前端开发 Java
Unicode转义(\uXXXX)的编码和解码
  在涉及Web前端开发时, 有时会遇到\uXXXX格式表示的字符, 其中XXXX是16进制数字的字符串表示形式, 在js中这个叫Unicode转义字符, 和\n \r同属于转义字符. 在其他语言中也有类似的, 可能还有其它变形的格式.
2588 0
|
6月前
|
存储 算法 JavaScript
base64编码是啥?
base64编码是啥?
71 0
使用base64对图片进行编码、对byte[]进行编码
使用base64对图片进行编码、对byte[]进行编码
82 0
C#使用base64对字符串进行编码和解码的测试
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
C#使用base64对字符串进行编码和解码的测试
|
存储 索引
Base64编码
通过阅读本篇文章,你可以了解到: 1、Base64 编码的作用 2、Base64 编码的规则 3、Base64 索引表
234 0
Base64编码
|
iOS开发
Unicode 与 UTF-8 编码的转换
Unicode 与 UTF-8 编码的转换
Unicode 与 UTF-8 编码的转换