尝试与我的Android应用进行通信。我的应用程序将一个32字节的md5哈希发送回Arduino。但是,当我收到响应apdu时,最后9个字节已损坏。
这是我的Arduino草图的相关部分:
uint8_t response[32];
uint8_t responseLength = sizeof(response);
if (nfc.inDataExchange(message, sizeof(message), response, &responseLength)) {
Serial.print("TYPECASTED RAW: ");
for (int i = 0; i < sizeof(response); i++) {
Serial.print((char)response[i]);
}
Serial.println(" ");
输出:
TYPECASTED RAW: e68d3f574009cbbe0111502ÿÿÿÿÿÿÿÿÿ
正如您所看到的,最后9个字节是错误的。现在,我打开了Adafruit NFC I2C库中的调试模式,它输出“状态码”表示错误&#39;当我发回apdu时。
这是推出状态代码的NFC库的相关部分:
if (pn532_packetbuffer[5]==PN532_PN532TOHOST && pn532_packetbuffer[6]==PN532_RESPONSE_INDATAEXCHANGE) {
if ((pn532_packetbuffer[7] & 0x3f)!=0) {
#ifdef PN532DEBUG
Serial.println("Status code indicates an error");
#endif
return false;
}
任何人都有任何关于为什么我的最后9个字节被破坏的想法?
提前致谢。
答案 0 :(得分:0)
你的尺码错误。 sizeof(response)
被声明为变量response
的大小,32个字节。
inDataExchange
使用responseLength
返回填充的字节,因此不会使用全部32个。
for (int i = 0; i < responseLength; i++) {
Serial.print((char)response[i]);
}
将打印刚才使用的字节。
答案 1 :(得分:0)
以下是我解决问题的方法。
首先,我在Android端正确构建了APDU。我的原始响应APDU只是散列的字节数组,没有所需的SW1和SW2字节。
然后在Arduino方面,这是我如何从中获取哈希:
uint8_t response[64];
uint8_t responseLength = sizeof(response);
if (nfc.inDataExchange(message, sizeof(message), response, &responseLength)) {
String respBuffer;
for (int i = 0; i < 16; i++) {
if (response[i] < 0x10) respBuffer = respBuffer + "0";
respBuffer = respBuffer + String(response[i], HEX);
}
Serial.println(respBuffer);
}
希望这有助于某人。