2010-12-13 22 views
4

Entschlüsseln habe ich eine key.bin Datei, die Inhalte etwas entlang der Linien von ist:Encrypting/3DES in Ruby

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

Dies wird durch einen Dienst verwendet wird 3DES Inhalt zu entschlüsseln, aber ich brauche es zu verschlüsseln über Ruby.

Ich habe viele Szenarien versucht, mit, wie Sie den Schlüssel setzen und was damit zu tun, aber ohne Erfolg, als der noch:

  • Versucht, den Schlüssel durch, spalten und jede Zahl zu hex konvertieren , die hex-Werte verketten den Schlüssel zu machen
  • versucht, binär die Anzahl Zeichenfolge Umwandlung
  • versucht, binäre
  • die resultierende hex Umwandlung

ich gehe davon aus, was ich tun muss, ist etwas simpl e wie:

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 

Irgendwelche Ideen auf, was ich mit diesem Schlüssel tun sollte?

Key Beispiel:

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

Daten Beispiel:

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

Können Sie es, eine beliebige key.bin für uns ernähren? Wenn dies der Fall ist, würden einige Beispieleingaben, -ausgaben und -schlüssel einen großen Teil dazu beitragen, dieses Problem umzukehren. Alternativ, was ist der Webdienst in Frage? – SilverbackNet

+1

Der Schlüssel ist eine Byte-Zeichenkette, wobei jede Zahl 8 Bit repräsentiert (z. B. 124 ist 01111100). Wahrscheinlich verwendet sie das Zweierkomplement. Sie müssen die Bytes verketten, aber Sie müssen die Endianz testen. – marcog

Antwort

4

habe es funktioniert!

Hier ist, wie:

Decryption

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 

Encryption

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)