В настоящее время я работаю над проектом Arduino с использованием Teensy 3.2.
Проект использует некоторый код шифрования, который существует в папке библиотеки. При создании кода шифрования любое необходимое заполнение было жестко закодировано до тех пор, пока не сработает остальная часть шифрования. С шифрованием я перешел к рандомизации процесса заполнения.
В настоящее время я использую функцию random () из Wprogram.h.
При использовании ручного заполнения вывод выглядит нормально. Однако, как только генератор случайных чисел используется, выходные данные становятся дикими и неразборчивыми.
При использовании ручного заполнения:
//st is defined as byte[4][4]
st[0][0]=message; //character from original message, usually 'a' for testing
st[0][1]='1';
st[0][2]='2';
st[0][3]='3';
...
st[3][3]='k';//Output
//set state: a123CDEF89fghijk //state prior to encryption
//encrypted: ⸮$2⸮⸮k6⸮tʠ&⸮⸮ //this should look funny
//decrypted to: a123CDEF89fghijk //matches plaintext
При использовании случайного заполнения я пробовал несколько разных способов:
//starting off with one random char for ease of testing
//random value seeded by randomSeed(analogRead(7));
st[0][0]=message;
st[0][1]=byte(random(33,127));//using 33 to 127 to avoid non-print chars
st[0][2]='2';
st[0][3]='3';
...
st[3][3]='k';
//-----Also Trying------
//It almost seemed like the data from the random number generator was flawed
//So I put in a scheme to ensure a hard coded character
if(random(100)%2)
st[0][1]='a';
else
st[0][1]='b';
//--------Also trying----------
//Since it seems like it is simply the existance of the random value that is
// problematic, I tried calling it without using it
int randval=random(100);
st[0][0]=message;
st[0][1]='1';
st[0][2]='2';
st[0][3]='3';
...
st[3][3]='k';
//Typical Output
//set state: a123CDEF89fghijk //state prior to encrypting(random char shows)
//encrypted: *3}3⸮⸮⸮⸮⸮⸮⸮⸮⸮N //this should look funny
//decrypted to: ⸮⸮⸮⸮⸮⸮⸮⸮k⸮-⸮⸮ //this should not look funny
От попытки нескольких разных способов создания случайного символа и от того, чтобы увидеть, что просто существование случайного значения вызывает проблемы. Я подозреваю, что есть кое-что глючное в том, как функция random () работает на arduino / teensy.
Что-то еще, что я заметил после установки случайного числа и неиспользования его, это то, что когда я удаляю эту строку кода, мне нужно пару раз перекомпилировать, прежде чем код снова заработает правильно. Это заставляет меня подозревать функцию еще больше или глючит.
Как я отмечал в примерах кода, я заполняю генератор случайных чисел неиспользованным пин-кодом. Несмотря на то, что я подозреваю, что это будет проблемой, я попробовал несколько разных выводов, чтобы быть в безопасности.
Поэтому я думаю, что мои вопросы здесь могут быть: кто-нибудь знает, что может быть причиной этой проблемы, или может предложить и альтернативный способ получить случайное значение?
Задача ещё не решена.
Других решений пока нет …