当前位置:   article > 正文

入坑CTF——Huffman编码解码(有疑问)_(flag[x] ^ keyword[x]).encode('hex')

(flag[x] ^ keyword[x]).encode('hex')

 

目录

Huffman编码:

题目:

解题:

 疑问:


Huffman编码

Huffman编码来自哈夫曼树(即最优二叉树),带权路径长度最小的二叉树,经常应用于数据压缩。出现频率(概率)高的字符码长就短,出现频率(概率)低的字符码长就长。且Huffman编码是异前置码字,即任一码字不会是另一码字的前面部分,这使各码字可以连在一起传送,中间不需另加隔离符号,只要传送时不出错,收端仍可分离各个码字,不致混淆。

题目:

这是一到关于Huffman编码解码的题目:

  1. ciphertext:170310021e0b065f0144005a13014707525055560b065b011342035b525e1306550601065418
  2. ciphertext[x] = (flag[x] ^ keyword[x]).encode('hex')
  3. enckeyword = 1100011010101111010000111111111100011010110011100110101000011000101101101110001000111111011100110101001010
  4. keyword tip:Huffman Coding
  5. q--6
  6. o--7
  7. b--4
  8. c--5
  9. a--3
  10. e--10
  11. h--1
  12. w--2

ciphertext[x] = (flag[x] ^ keyword[x]).encode('hex')

则有ciphertext[x].decode('hex')=flag[x]^keyword[x]

flag[x]=ciphertext[x].decode('hex')^keyword[x]

解题:

  1. import binascii
  2. dic = {'q': '001', 'o': '11', 'b': '101', 'c': '100', 'a': '0001', 'e': '01', 'h': '00001', 'w': '00000'}
  3. Ctext ='1100011010101111010000111111111100011010110011100110101000011000101101101110001000111111011100110101001010'
  4. def get_key(val):
  5. for key, value in dic.items():
  6. if val == value:
  7. return key
  8. return "There is no such Key"
  9. i , j = 0 , 0
  10. Mtext = ''
  11. while j < len(Ctext):
  12. if Ctext[i:j] in dic.values():
  13. Ch=get_key(Ctext[i:j])
  14. # print(Mtext)
  15. Mtext += Ch
  16. i=j
  17. j+=1
  18. else:
  19. j+=1
  20. print (Mtext)
  21. ciphertextHex='170310021e0b065f0144005a13014707525055560b065b011342035b525e1306550601065418'
  22. hex =ciphertextHex.encode('utf-8')
  23. print(hex)
  24. ciphertextBin=binascii.unhexlify(hex)
  25. print(ciphertextBin)
  26. ciphertext=ciphertextBin.decode('utf-8')
  27. print (ciphertext)
  28. print(len(Mtext))
  29. print(len(ciphertext))
  30. flag =''
  31. for i in range (len(ciphertext)):
  32. flag+= chr (ord(ciphertext[i]) ^ ord(Mtext[i]))
  33. print (flag)

解码解出来:keyword=‘oabeeobhoooocebecocoeehceebboaaooboqbeqe’

flag是:xbrg{dd7n+o5pd%b1?69nc3bv'a9=?ri:dnw6}(感觉不符合预期)

 疑问:

对于相同的字符出现频率的情况,Huffman编码不唯一,这就导致Huffman编码解码的时候得到的结果不唯一。

如何能保证这种唯一性,希望有大佬可以解答

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/226409
推荐阅读
相关标签
  

闽ICP备14008679号