В настоящее время я использую Misty Block Cipher в Arduino IDE, и столкнулся со странной проблемой. Имейте в виду, что я далеко не компетентный кодер. Я взял код со страницы github и скомпилировал его на онлайн-компиляторе C, и он отлично работает, но в Arduino вывод получился очень запутанным. Я попытался отладить оба кода и распечатать разные состояния в коде, и я знаю, где это происходит.
void misty1_encrypt(unsigned int *expkey, unsigned char *ptext,
unsigned char *ctext)
{
unsigned int D0, D1;
int i, j = 0;
for (i = 0; i < 32; i++) EK[i] = expkey[i];
D0 = D1 = 0;
for (i = 0; i < 4; i++) {
D0 = D0 << 8;
D0 |= ptext[j++];
}
printf("D0 atm:");
printf("%02x",D0);
printf("\n");
for (i = 0; i < 4; i++) {
D1 = D1 << 8;
D1 |= ptext[j++];
}
printf("D1 atm:");
printf("%02x",D1);
printf("\n");
}
Печать приведенного выше кода в компиляторе C дает
old plaintext1 : 0123456789abcdef
D0 atm:1234567
D1 atm:89abcdef
Однако, при печати кода в Arduino, это то, что я получаю
old plaintext1 : 0123456789abcdef
D0 atm:4567
D1 atm:cdef
Я не хочу публиковать весь код, чтобы он не занимал 20 страниц, но стоит упомянуть, что я реализую это на основе реализации RFC2994, и его можно найти здесь: https://tools.ietf.org/html/rfc2994
Из моего незначительного знания кодирования я чувствую, что проблема может возникнуть из-за использования Unsigned Int, но я использовал Uint_32t, и в результате получился тот же результат. Любая помощь будет принята с благодарностью. Я заранее извиняюсь, если публикация не очень удачная, я постараюсь ответить на любые вопросы, которые могут помочь.