How to write MifareClassic with Custom Key

試著忘記壹切 提交于 2020-01-02 16:02:04

问题


I need to find a solution to write Mifare Classic 1 K Tag with Custom Key. I am unable to write it, I have tried with every option but unfortunately all the time I get the error "IOException: Transceive Failed".

Below is my code snippet:

byte custom_key[]={
  (byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff
};

// 16 bytes of Data. Otherwise it was throwing IllegalArgumentException .
byte[] data="Hello world of N".getBytes();
getMfc().connect();

if(getMfc().authenticateSectorWithKeyA(4, custom_key)) {
  getMfc().writeBlock(3, data); // Here I receive IOException all the time.
} else {
  getMfc().close();
}

Please help me in this regard. I need to write Mifare Classic 1 K Tag with my own key.


回答1:


You authenticate to sector 4 and then you try to write to block 3. Block 3 is in sector 0, so this will always fail. Try authenticating to sector 0 instead.

BTW: Please, don't write random data to a sector trailer (such as block 3). It will likely lock up the sector with no way to recover.




回答2:


If I understand correctly, the question is how to edit block 3 in sector 4.
After authentication you try to write to block 3. But:
A blocks number does not start at 0 in every block. Sector 0 has blocks 0-3, sector 1 has blocks 4-7, and so on. Sector 4 has a block-offset of 4*4=16. So the block you want to write to is block 19.

There is a function available that calculates this offset for you. sectorToBlock(4) yields 16.
For writing to block 3 in sector 4 I would use the following:
getMfc().writeBlock(getMfc().sectorToBlock(4)+3, data)

The accepted answer does only provide the alternative that leaves the questioner unable to understand the block-indexing beyond sector 0.



来源:https://stackoverflow.com/questions/13154452/how-to-write-mifareclassic-with-custom-key

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!