1

現在、DESFireEV1非接触型カードを使用しています。マスターキー「000000 00 00 00 00 00 00 00 00 00 00 000000」を使用してDES/CBCで暗号化されたrandom_bを解読しようとしています。

私はこのコードを使用しています:

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

しかし、このコードは正しく解読されません。この無効な結果が表示されます:「4B9D 5A 91 AE93F8ED」正しい結果は「A42F3E84 2C5A2968」です。

4

1 に答える 1

2

マスターキーバイトがすべてゼロであることが意図されている場合、これは正しくありません。

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

これにより、プラットフォームのデフォルトエンコーディングで「0000000000000000」のテキストエンコード形式が取得されます。{ 0x30, 0x30, 0x30 ... }

ただし、ゼロでいっぱいの配列を取得するのは簡単です。

byte[] masterKeyBytes = new byte[16];

IVの場合も同様です(もちろん、適切な長さです)。

それでも、確かに、探している結果は得られません...しかし、「すべてゼロ」のキー/IVを使用しています

于 2012-07-08T19:26:04.503 に答える