找到DES的密钥

时间:2013-02-10 00:41:52

标签: java cryptography encryption des

使用java中给出的DES解决加密和解密问题。 我已经想出如何加密和解密非常容易但现在我卡住了。 对于当前的问题,我有明文和相应的密文(格式为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 个答案:

答案 0 :(得分:1)

蛮力。

枚举它可能的每个键(给定固定字节),直到得到使明文和密文匹配的解密。它需要编辑:平均2 ^ 37次尝试,所以不要指望它快速发生:)

DES的一些属性可以让你更快地破解它,但它们很难实现,我怀疑你是否应该学习它们。但如果您有兴趣,http://en.wikipedia.org/wiki/Data_Encryption_Standard#Security_and_cryptanalysis