Найти ключ для DES

Работает над проблемой шифрования и дешифрования с использованием DES, приведенного в Java. Я уже понял, как довольно легко зашифровать и расшифровать, но теперь я застрял. Для текущей проблемы у меня есть у меня есть открытый текст и зашифрованный текст (который находится в формате 8 шестнадцатеричных пар, например: A5 33 1F ..), но у меня также есть первые 4 шестнадцатеричных бита ключа. Я на самом деле не спрашиваю код, а скорее представляю, как бы я решил эту проблему! все поможет! это мой код расшифровки (просто включил его, чтобы показать, что я усердно работаю:)). Спасибо, парни!

public static void decrypt(){
    Cipher cipher;
    SecretKeySpec key;
    byte [] keyBytes;
    byte [] pt;
    byte [] ct;
    String plaintxt;

    keyBytes = new byte [] {(byte)0xFE, (byte)0xDC, (byte)0xBA, (byte)0x98, (byte)0x76, (byte)0x54, (byte)0x32, (byte)0x10};
    key = new SecretKeySpec(keyBytes, "DES");
    ct = new byte [] {(byte) 0x2C, (byte) 0xE6, (byte) 0xDD, (byte) 0xA4, (byte) 0x98, (byte) 0xCA, (byte) 0xBA, (byte) 0xB9};

    try{
        cipher = Cipher.getInstance("DES/ECB/NoPadding");
        cipher.init(Cipher.DECRYPT_MODE, key);
        pt = cipher.doFinal(ct);
        printByteArray(pt);
        plaintxt = byteToHex(pt);
        hexToAscii(plaintxt);
    }
    catch(Exception e){
        e.printStackTrace();
    }

}

1 ответ

Решение

Грубая сила.

Перечисляйте каждый ключ, которым он может быть (с учетом фиксированных байтов), пока не получите расшифровку, которая позволяет сопоставить открытый и зашифрованный текст. Это займет редактирование: в среднем 2^37 попыток, поэтому не ожидайте, что это произойдет быстро:)

Есть некоторые свойства DES, которые позволяют взломать его быстрее, но их очень сложно реализовать, и я сомневаюсь, что вы должны их изучить. Но если вам интересно, http://en.wikipedia.org/wiki/Data_Encryption_Standard

Другие вопросы по тегам