Проблемы, возникающие между Arduino SHA1-HMAC и кодировкой base64 и Python

0

Итак, что мне нужно, это base64-кодированный SHA1 HMAC. Я нашел вилку Adafruit Cryptosuite, которая является урезанной SHA1 только для вилки библиотеки Cathedrow. Я хочу иметь возможность общаться между моим Arduino и Python-приложением, используя сигнатуры SHA1-HMAC с кодировкой base64. Однако, похоже, он не дает последовательных результатов:

На Arduino следующее должно генерировать SHA1-HMAC для тестирования строки:

  signingKey[] = "testKey";

  Sha1.initHmac_P((uint8_t *)signingKey, sizeof(signingKey) - 1);
  Sha1.print("testing");

Теперь я хочу, чтобы base64 закодировал это, что, по- видимому, для примера Adafruit Tweet кажется, что у него есть аккуратная функция (я понимаю, что это ожидает только SHA1-HMAC, ничего больше):

  // base64-encode SHA-1 hash output.  This is NOT a general-purpose base64
  // encoder!  It stripped down for the fixed-length hash -- always 20
  // bytes input, always 27 chars output + '='.
  for(in = Sha1.resultHmac(), out=0; ; in += 3) { // octets to sextets
    b64[out++] =   in[0] >> 2;
    b64[out++] = ((in[0] & 0x03) << 4) | (in[1] >> 4);
    if(out >= 26) break;
    b64[out++] = ((in[1] & 0x0f) << 2) | (in[2] >> 6);
    b64[out++] =   in[2] & 0x3f;
  }
  b64[out] = (in[1] & 0x0f) << 2;
  // Remap sextets to base64 ASCII chars
  for(i=0; i<=out; i++) b64[i] = pgm_read_byte(&b64chars[b64[i]]);
  b64[i++] = '=';
  b64[i++] = 0;

Выходы:

qn9vJmo4Q6KhPgbn5nVOSOUCU5Q=

Но все плохо, когда я смотрю на это со стороны python:

hm = hmac.new('testKey', 'testing', hashlib.sha1)
print binascii.b2a_base64(hm.digest())[:-1]

Выходы:

YNQScdQ7h1t5Hi1Uw0vz8Biil2M=

Ясно, что эти две разные. К сожалению, я еще не использовал Arduino/C++ и больше знаком с Python. Есть ли очевидная ошибка в том, что я пытаюсь сделать, или библиотеки, которые я использую неадекватно для цели?

Благодарю!

Теги:
base64
arduino

1 ответ

2
Лучший ответ

Ввод ответа здесь: Правильная функция - Sha1.initHmac, а не Sha1.initHmac_P.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню