2010-12-13 28 views
4

で3DESを復号私はコンテンツはの線に沿って何かあるkey.binファイルがあります。これは、3DESのコンテンツを復号化するためのサービスで使用されているが、私はそれを暗号化するために必要暗号化/ルビー

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

をRuby経由で。

私はキーとそれに関係する設定方法とシナリオの負荷を試みたが、まだのよう無駄にしました:

  • をすることにより、キーを分割しようとしました、と進に各数値を変換します、進値を連結すると、私は何をする必要があるかと仮定したバイナリ

に結果進を変換しようとしたバイナリ

  • に数文字列を変換しようとしましたキー
  • を作るために何かSIMPLです次のようになります。

    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

    +1

    キーはバイト文字列で、各数字は8ビットを表します(たとえば、124は01111100です。おそらく2の補数を使用しているため、バイトを連結する必要がありますが、エンディアンをテストする必要があります)。 – marcog

    答えて

    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)