2010-12-13 44 views
4

J'ai un fichier key.bin dont le contenu est quelque chose le long des lignes de:Encrypting/3DES Ruby décryptage

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

Ceci est utilisé par un service pour déchiffrer le contenu 3DES, mais je dois chiffrer via Ruby.

J'ai essayé des tas de scénarios avec la façon de définir la clé et ce qu'il faut faire avec elle, mais sans résultat pour l'instant:

  • Essayé divisant la clé par, et la conversion de chaque numéro à six pans , concaténer les valeurs hexagonales pour rendre la clé
  • essayé de convertir la chaîne de nombres en binaire
  • essayé de convertir l'hexagone résultant en binaire

Je suppose que ce que je dois faire quelque chose simpl J'aime:

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 

Des idées sur ce que je devrais faire avec cette clé?

échantillon clé:

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

échantillon de données:

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

Pouvez-vous nourrir un key.bin arbitraire pour nous? Si c'est le cas, certains exemples d'entrée, de sortie et de clé iraient un long chemin vers l'ingénierie inverse de ce problème. Alternativement, quel est le service Web en question? – SilverbackNet

+1

La clé est une chaîne d'octets, chaque nombre représentant 8 bits (par exemple, 124 est 01111100. Il utilise probablement le complément de deux. Vous devrez concaténer les octets, mais vous devrez tester l'endianness. – marcog

Répondre

4

obtenu ce travail!

Voici comment:

Décryptage

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 

cryptage

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)