我是NFC的新手,几天来,我一直在试图将NTAG212 Mifare的第7页与身份验证连接起来,我已经拥有了PWD,并准备了基于NTAG212 Docs的PWD_AUTH。
我这么做..。
//assume password as array of bytes
//assume pack as array of bytes
try{
nfc.connect();
byte[] cmd1 = nfc.transceive(new byte[]{ (byte) 0x30, (byte) 0x00 }); //read the page 0 to make the NFC active
nfc.transceive(new byte[]{
(byte) 0x1B, //command for PWD_AUTH
pass[0],
pass[1],
pass[2],
pass[3]
});
byte[] cmd4 = nfc.transceive(new byte[]{ (byte) 0x30, (byte) 0x04 }); //read the page 4
}catch(TagLostException e){
e.printStackTrace();
}catch(IOException e){
e.printStachTrace();
}finally{
try{
nfc.close();
}catch(Exception e){
//display failed to close
}
}
在向NFC发送android.nfc.TagLostException: Tag was lost.
命令后,总是会收到PWD_AUTH错误。有人能告诉我我做错了什么吗?我的方法正确吗?请帮帮忙。
注意:我已经读了很多次NTAG212的文档,搜索过google,堆栈溢出和所有可能的资源。
蒂娅
肯斯特
发布于 2014-03-28 21:07:54
发送到标记的PWD_AUTH命令没有多大意义。
PWD_AUTH命令的思想是发送您的密码(一个4字节值),如果您使用正确的密码进行身份验证,则标记将使用其密码应答,并使用其密码确认(PACK)值(一个2字节值)。然后,您可以根据预期的密码确认来验证PACK值,以“验证”标记。
所以正确的命令是:
byte[] response = nfc.transceive(new byte[] {
(byte) 0x1B, // PWD_AUTH
pass[0], pass[1], pass[2], pass[3]
});
if ((response != null) && (response.length >= 2)) {
byte[] pack = Arrays.copyOf(response, 2);
// TODO: verify PACK to confirm that tag is authentic (not really,
// but that whole PWD_AUTH/PACK authentication mechanism was not
// really meant to bring much security, I hope; same with the
// NTAG signature btw.)
}
您需要什么才能启用密码保护(在NTAG212上):
0xFFFFFFFF
)。
byte[] response =nfc.transceive(新的byte[] {(字节) 0xA2,//写(字节) 39,//页面地址传递,pass1,pass2,pass3 });0x0000
)。
byte[] response =nfc.transceive(新的byte[] {(字节) 0xA2,// byte[](字节) 40,//页地址包,pack1,//字节0-1是包值(字节) 0,(字节)0 //其他字节为RFU,必须写入0 });如果使用MifareUltralight
标记技术,而不是直接使用transceive
方法,还可以使用readPages
和writePage
方法:
发布于 2021-07-20 12:15:04
当在TagLostException
操作期间发送错误的密码时,一个将获得PWD_AUTH
。
确保在PWD_AUTH
操作中发送的4字节密码与使用常规WRITE
操作设置标记的PWD
字段的内容相匹配。
https://stackoverflow.com/questions/22719465
复制相似问题