2016-08-01 60 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。