2013-02-10 110 views
1

使用java中給出的DES進行加密和解密的問題。我已經想出瞭如何加密和解密很容易,但現在我卡住了。 對於目前的問題,我有我有明文和coorisponding密文(它是在8十六進制對的格式,例如:A5 33 1F ..),但我也有密鑰的前4個十六進制位。我沒有真正要求代碼,但更多的是一個想法,我將如何去解決這個問題!任何事都會有幫助這是我的解密代碼(只是包括它顯示我工作辛苦:))。多謝你們!找到DES的密鑰

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(); 
    } 

} 
+0

你問「如何確定密鑰,給定明文和密文?」。如果是這樣,這是一個非常困難的問題。 – 2013-02-10 00:43:56

+0

好耶,但我也有第4個字節已經所以我只需要解決4字節 – erp 2013-02-10 00:53:31

回答

1

蠻力。

枚舉每個可能的密鑰(給定固定字節),直到獲得解密使明文和密文匹配。它會進行編輯:平均2^37次嘗試,所以不要指望它快速發生:)

有一些DES的屬性可以讓你更快地破解它,但它們很難執行,我懷疑你會期望學習它們。但是,如果你有興趣,http://en.wikipedia.org/wiki/Data_Encryption_Standard#Security_and_cryptanalysis

+0

是啊哈哈這是我知道的一件事,肯定會需要一段時間。我班上的其他人說,花了30分鐘才找到解決方案!多數民衆贊成,但真棒!所以你說的就像遍歷每個可能性,有點像說我的第一個4位,例如「12 A3 5B FF」,然後開始接下來的4位@零,然後慢慢增加我的方式,而整個時間檢查如果它等於我的密文? :D – erp 2013-02-10 00:52:38

+0

是的,差不多。這是對DES可行攻擊的唯一原因是因爲它的密鑰大小非常小 - 54位。 AES的密鑰大小爲128位,192位或256位 - 這並不意味着它大約是硬件的2-4倍,這意味着它的每個額外位都更難* 2。所以2^64倍更難或更多:) – Patashu 2013-02-10 00:53:38

+0

是很酷的東西。在我的密碼學課中學習了這些!感謝幫助的人,我現在要嘗試實施暴力攻擊! – erp 2013-02-10 01:01:59