Java 查找DES的密钥

Java 查找DES的密钥,java,cryptography,encryption,des,Java,Cryptography,Encryption,Des,正在研究使用java中给定的DES加密和解密的问题。 我已经想出了如何加密和解密相当容易,但现在我卡住了。 对于当前的问题,我有明文和协同加密文本(格式为8个十六进制对,例如A5 33 1F..),但我也有密钥的前4个十六进制位。我不是真的要求代码,但更多的是一个想法,我将如何着手解决这个问题!什么都行!这是我的解密代码(包括它只是为了表明我正在努力工作:)。谢谢大家 public static void decrypt(){ Cipher cipher; SecretKeySp

正在研究使用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();
    }

}
蛮力

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

DES有一些特性可以让您更快地破解它,但它们很难实现,我怀疑您是否会期望学习它们。但如果你感兴趣,请使用蛮力

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


DES有一些特性可以让您更快地破解它,但它们很难实现,我怀疑您是否会期望学习它们。但是,如果您感兴趣,您是否会问“在给定明文和密文的情况下,如何确定密钥?”。如果是这样的话,这是一个非常困难的问题。是的,但是我已经有了前4个字节,所以我只需要解4个字节。你是在问“给定明文和密文,如何确定密钥?”。如果是这样的话,这是一个非常困难的问题。嗯,是的,但我也已经有了前4个字节,所以我只需要解4个字节。是的,哈哈,这是我唯一确定的一件事,这将需要一段时间。我班上的另一个人说,大概花了30分钟才找到解决方案!那很恶心,但是很棒!你是说,就像迭代每种可能性一样,有点像我的前4位,比如“12 A3 5B FF”,然后开始下4位@0,然后慢慢递增,同时一直检查它是否等于我的密码文本啊,差不多。这是对DES可行的攻击的唯一原因是它的密钥大小非常小——54位。AES的密钥大小为128位、192位或256位,这并不意味着它的难度是原来的2-4倍,而是意味着密钥中每增加一位,它的难度就增加了*2。所以2^64倍或更多:)是的,很酷的东西。我们在密码学课上学到了这一点!谢谢你的帮助,我现在要尝试实施暴力攻击!一个简单的问题。如果我使用的键是字节数组,我将如何递增?将值放在数组的最后四个点中,就像使用一对循环一样?像4个循环?我不确定我将如何更改数字,我清楚地理解这个概念。将索引设置为0。将最低字节增加1-如果溢出为0,则增加索引并增加下一个字节。一旦没有溢出到0,就将索引设置回0。像那样的东西是的,哈哈,这是我唯一能肯定的一件事,那将需要一段时间。我班上的另一个人说,大概花了30分钟才找到解决方案!那很恶心,但是很棒!你是说,就像迭代每种可能性一样,有点像我的前4位,比如“12 A3 5B FF”,然后开始下4位@0,然后慢慢递增,同时一直检查它是否等于我的密码文本啊,差不多。这是对DES可行的攻击的唯一原因是它的密钥大小非常小——54位。AES的密钥大小为128位、192位或256位,这并不意味着它的难度是原来的2-4倍,而是意味着密钥中每增加一位,它的难度就增加了*2。所以2^64倍或更多:)是的,很酷的东西。我们在密码学课上学到了这一点!谢谢你的帮助,我现在要尝试实施暴力攻击!一个简单的问题。如果我使用的键是字节数组,我将如何递增?将值放在数组的最后四个点中,就像使用一对循环一样?像4个循环?我不确定我将如何更改数字,我清楚地理解这个概念。将索引设置为0。将最低字节增加1-如果溢出为0,则增加索引并增加下一个字节。一旦没有溢出到0,就将索引设置回0。诸如此类