Arduino random()影响字符串输出

时间:2018-03-22 02:49:45

标签: c++ random arduino teensy

我目前正在使用Teensy 3.2进行arduino项目。

项目使用库文件夹中存在的一些加密代码。在构建加密代码时,所需的任何填充都是硬编码的,直到其余的加密工作。加密工作后,我开始随机化填充过程。

我目前正在使用Wprogram.h中的random()函数。

使用手动填充时,输出似乎很好。但是,只要使用随机数生成器,输出就会变得狂野且难以理解。

使用手动填充时:

//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上运行的错误。

在设置随机数并且不使用它之后我注意到的其他事情是,当我删除这行代码时,我必须在代码再次正常工作之前重新编译几次。这使我怀疑这个功能更多或者是有缺陷的。

正如我在代码示例中所提到的,我正在使用未使用的引脚为随机数生成器播种。尽管我怀疑这会是一个问题,但为了安全起见,我尝试了几个不同的引脚。

所以我想我的问题可能是:有人知道可能导致这个问题的原因,或者可能建议和替代获得随机值的方法吗?

0 个答案:

没有答案