2012-07-08 31 views
1

我目前正在使用DESFire EV1非接觸卡。 我想用masterkey解密DES/CBC編碼的random_b:「00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00」。DESFire身份驗證解碼器

我使用這個代碼:

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」

回答

2

如果您的主密鑰字節意味着全部爲零,這是不正確的:

byte[] masterKeyBytes = "0000000000000000".getBytes(); 

,將讓你的「0000000000000000」的文本編碼形式在平臺默認的編碼 - 最有可能{ 0x30, 0x30, 0x30 ... }

得到一個數組全零的很簡單,但:

byte[] masterKeyBytes = new byte[16]; 

同上IV(當然有適當的長度)。

這仍然不會給你你正在尋找的結果,誠然......但它使用「全零」鍵/四。

+0

非常感謝你!這是問題! – 2012-07-08 19:30:10

+0

它的工作原理!我得到了相同的結果,現在我無法使用desfire卡進行身份驗證! – 2012-07-08 19:31:43

+1

@IonutBogdan:嗯......當我嘗試使用「有效」鍵/ IV代碼時,我得到第一個字節爲136,即0x88,而不是0xA4。不過,如果你很開心:) – 2012-07-08 19:33:08