2016-08-01 83 views
1

给定密文7b5a4215415d544115415d5015455447414c155c46155f4058455c5b523f151515151515151515151515151515151515151515151515151515151515 xored得到6e4f57005448415400544845005041525459004953004a554d50494e472a(这里没有火箭科学)。用XOR-cipher解密后无法得到正确的编码

现在,我试图将这个十六进制编码的字符串解码为普通字符串 - 结果应该是Now that the party is jumping\n。不幸的是,它是

irb(main):012:0> ["6e4f57005448415400544845005041525459004953004a554d50494e472a"].pack('H*') 
=> "nOW\x00THAT\x00THE\x00PARTY\x00IS\x00JUMPING*" 

它足够接近我解密它,但也足够糟糕,得分差,给英语字母频率评估。

对于我之前使用的所有字符串,我已经使用了[str].pack('H*'),并且它进行得很顺利。例如

irb(main):004:0> ["54686520717569636b2062726f776e20666f78206a756d7073206f76657220746865206c617a7920646f672e"].pack('H*') 
=> "The quick brown fox jumps over the lazy dog." 

我猜新数据集有一些奇怪的编码,我无法解密和处理。

任何Ruby的想法?

+0

这很奇怪。密文是如何产生的?你能分享你用来做XORing的代码吗? –

+1

Cryptopals挑战4?这不是编码,有一个更好的关键 - 你需要提高你的英语评分程序。 – matt

+0

这不是一个编码问题,你的字符串里有NULL字节。 '\ x00'是NULL的ASCII码。 – DiegoSalazar

回答

3

您可能只需将0x20的密钥流(因此密文)异或。这将把大写字母变成小写字母和零字符(空格)(0x20)。

所以关键是0x35而不是0x15。