Java 去火认证破译器

Java 去火认证破译器,java,mifare,encryption,Java,Mifare,Encryption,我目前正在使用DESFire EV1非接触式卡。 我正试图用万能钥匙破译DES/CBC加密的随机密码:“00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

我目前正在使用DESFire EV1非接触式卡。 我正试图用万能钥匙破译DES/CBC加密的随机密码:“00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00”

我正在使用以下代码:

byte[] encipheredCodeRandomB = { (byte)0xEA ,(byte)0x18 ,(byte)0xDE ,(byte)0xFF
     ,(byte)0x52 ,(byte)0x0E,(byte)0xCD, (byte) 90};
byte[] masterKeyBytes = "0000000000000000".getBytes();
byte[] ivBytes = "00000000".getBytes();

DESKeySpec desKeySpec = new DESKeySpec(masterKeyBytes);  
SecretKeyFactory desKeyFact = SecretKeyFactory.getInstance("DES");
SecretKey s = desKeyFact.generateSecret(desKeySpec);
aliceCipher = Cipher.getInstance("DES/CBC/NoPadding");
aliceCipher.init(Cipher.DECRYPT_MODE, s, new IvParameterSpec(ivBytes));

byte[] decipheredCodeRandomB = aliceCipher.doFinal(encipheredCodeRandomB);
但是这段代码不能正确破译。我得到一个无效的结果:“4B 9D 5A 91 AE 93 F8 ED”正确的结果是:“A4 2F 3E 84 2C 5A 29 68”

如果您的主密钥字节都是零,那么这是不正确的:

byte[] masterKeyBytes = "0000000000000000".getBytes();
这将得到平台默认编码中的文本编码形式“0000000000000000”-很可能
{0x30,0x30,0x30…}

不过,获取一个满是零的数组很简单:

byte[] masterKeyBytes = new byte[16];
静脉注射也是如此(当然,长度要合适)


不可否认,这仍然不能给你你想要的结果。。。但它使用的是“全零”键/IV。

它可以工作!我得到了同样的结果,现在我可以用desfire卡进行身份验证@伊努特博格丹:嗯。。。当我尝试该代码但使用“valid”键/IV时,我得到的第一个字节是136,即0x88,而不是0xA4。不过,如果你高兴的话:)