2010-12-13 33 views
4

解密3DES我有一個key.bin文件,該文件的內容是沿着線的東西:加密/ Ruby中

-12, 110, 93, 14, -48, ... 

這是正在使用的服務來解密3DES的內容,但我需要對它進行加密通過Ruby。

我已經試過與如何設置鍵和如何處理它的場景加載,但無濟於事作爲尚未:

  • 試圖通過拆分的關鍵,每個數字轉換爲十六進制,串聯的十六進制值,使關鍵
  • 試過數字字符串轉換爲二進制
  • 嘗試所產生的十六進制轉換爲二進制

我想什麼,我需要做的是什麼SIMPL e喜歡:

des = OpenSSL::Cipher::Cipher.new('des3') 
des.decrypt 
des.key = mistery # this step is where i'm having problems at 
final = des.update(encrypted) + des.final 

任何想法,我該怎麼做這個關鍵?

主要樣本:

-62,-53,124,-110,37,-88,-48,31,-57,93,70,-101,44,69,-88,-57,-123,-99,118,-119,110,55,11,14 

數據樣本:

NEb2b9sYXgod6mTvaRv+MRsTJvIiTTI9VjnDGcxjxcN5qBH7FXvxYI6Oj16FeKKsoQvjAmdju2SQ 
ifJqPJTl97xeEbjdwm+W8XJnWs99ku85EznVBhzQxI1H2jPiZIcrqIVCWdd/OQun7AjK4w2+5yb7 
DPN2OiCIEOz2zK6skJrBw3oTEHpXrSEhydOYxqI+c5hC4z3k5nktN6WSVLIo8EAjwenHPMDxboWF 
ET8R+QM5EznVBhzQxI1H2jPiZIcrqIVCWdd/OQun7AjK4w2+5yb7DPN2OiCIFqk4LRwEVq16jvKE 
vjz6T4/G34kx6CEx/JdZ1LdvxC3xYQIcwS0wVnmtxorFm4q5QQFHzNKQ5chrGZzDkFzAogsZ2l2B 
vcvlwgajNGHmxuVU83Ldn1e5rin7QqpjASqeDGFQHkiSbp4x6axVce2OGgfFpZdzCM7y6jLPpOlX 
LOC/Bs1vTwMzcBNRB/Fo4nsX9i4It8Spm228XQNUpQe4i9QGe/4AyKIhHoM8DkXwPZ6rWp0W0UMe 
keXjg41cED1JwjAAQSP3RYITB78bu+CEZKPOt2tQ2BvSw55mnFcvjIAYVQxCHliQ4PwgceHrnsZz 
5aagC0QJ3oOKw9O0dlkVE3IM6KTBMcuZOZF19nCqxMFacQoDxjJY8tOJoN0Fe4Boz2FPyuggfLz9 
yhljVJhxqOlTd8eA34Ex8SdC+5NDByAMumjzcPcXL8YVpSN85gytfd+skXhz3npmJ0dmZZOouu0Z 
vMmlaCqw96Sy0L1mHLKbjqmZ/W57OBNRB/Fo4nsX9i4It8Spm228XQNUpQe4i9QGe/4AyKIhHoM8 
DkXwPZ5tXdq1dRG6IaS51oNzFFlOoP3wTJuOTpj+zQOBMMOi4ENFyyEwYbG/qE+uY8rVwBOUHv9b 
Yd9byvOZbnHDuf4oaWRZ+4K3s2NkEblDF9wU6Mb0ZqnLEJsypjrorH1cNIodIDu8nME1nD5bIDF6 
XNrWC6pk6AV6eYQvNJw2QDz0RBD15fz/fAXCvbaCLDnhBKpLXrRbQdV+jxx2ipeC2ceMLLRFRPuR 
B+ycYht65lWh4jNjoEsBXGFKiT0bSX6Lx/ZQD3twJWbML8ifRhw7SW0jOkUF+dAfXYNaD6nqA6Xq 
TkcsDGaJsVq8wwCIWNh6tDRSw7ba4c391147kmnqEgXdKmmnEzUfHtpRw88C0/u0qj809hB4qB0B 
lxj/87aDo4VOz9S4jjtk849CxtA/a9+532A4YlXjsPt/f0KZ2drAGEr1VSWzaLh/sMwP5tznmPaK 
uozS6C74gMNdhtNMFz0HONcYecS0hg4lrdRyljROgzC33QoBIHbQXJrG0OXE3+81uhJwusEnFaD9 
8Eybjk6YeNk3oxL3C5fx/xXgFmhcLLGdxRe/am0jqA1gV6MyQFUKtzdnNOUYpHkYXT9Ea7YYln4Q 
D96Z9AI5EznVBhzQxI1H2jPiZIcrqIVCWdd/OQun7AjK4w2+5yb7DPN2OiCIFqk4LRwEVq16jvKE 
vjz6T4/G34kx6CEx/JdZ1LdvxC3iEcYTrEH9kKhPrmPK1cATlB7/W2HfW8rzmW5xw7n+KGlkWfuC 
t7NjZBG5QxfcFOjG9GapyxCbMqY66Kx9XDSKHSA7vJzBNZw+WyAxelza1guqZOgFenmElSgtUOo7 
TEunuphaMIEQgo0udojG6dm2FtRmA4yntNCnCDzGTY72nrFBz3EZmVXGEm6X3Xd5Ito= 
+2

你可以給它一個任意key.bin我們呢?如果是這樣的話,一些樣本輸入,輸出和關鍵點將對逆向工程這個問題有很大的幫助。或者,有什麼問題的Web服務? – SilverbackNet 2010-12-14 06:56:28

+1

關鍵是一個字節串,每個數字代表8位(例如124是01111100)。它可能使用了2的恭維,你必須連接字節,但你必須測試字節順序。 – marcog 2010-12-23 15:01:37

回答

4

得到它的工作!

方法如下:

解密

def read_key(key_file) 
    File.read(key_file).split(',').map { |x| x.to_i }.pack('c*') 
end 
des = OpenSSL::Cipher::Cipher.new('des-ede3') 
des.decrypt 
des.key = read_key('key.bin') 

result = des.update(decoded) + des.final 

加密

def read_key(key_file) 
    File.read(key_file).split(',').map { |x| x.to_i }.pack('c*') 
end 
des2 = OpenSSL::Cipher::Cipher.new('des-ede3') 
des2.encrypt 
des2.key = read_key('key.bin') 

result = des2.update(result) + des2.final 
puts Base64.encode64(result)