Найти ключ для 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