bin二进制文件解析
(2019-11-06 18:05:54)
标签:
二进制文件matlab |
分类: 程序调试 |
NIST Test工具箱 https://github.com/dj-on-github/sp800_22_tests
在做NIST
test的时候需要把数据存储成bin二进制文件,如果只是单纯的数据存储和读取的话没什么问题,就用常规的读命令、写命令就可以了,但是现在的问题是如果我们想写入101011,写进二进制文件之后每一个字符都被表示成一个8bit的数,比如1写进去之后是00110001,而0变成了00110000,这俩正好是1和0在ASCII表里的数值代表,符号1是49,49的二进制是00110001,符号0是48,48的二进制是00110000。
也就是说,如果我们想把10101100存入二进制文件,结果存进去之后变成
0110001 0110000 0110001 0110000 0110001 0110001 0110000
0110000. 这样的话如果我们把他放进nist test肯定就错了。
关于二进制文件的详细解释可以参考百度百科“二进制文件”,举例
列举一个二进制文件如下:
00000000h:0F 01 00 00 0F 03 00 00 12 53 21 45 58 62 35 34;
.........S!EXb54
00000010h:41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50;
ABCDEFGHIGKLMNOP
这里列出的是在 UltraEdit(UE) 里看到的东西。其实只有红色部分是文件内容。前面的是 UE 加入的行号。后面的是
UE 尝试解释为字符型的参考。
在Ubuntu里如果想看一个二进制文件里面的内容,可以用以下两个命令:
xxd -b yourfile.bin
hexdump -C yourfile.bin
要想按这种方式存储的话可以参考下面的代码,思路是先把
101010101010.。。按8位一组转换成字符串,然后将这8位字符串转换成对应的uint8,最后存的是这个uint8。
N=8000000;
key=randi([0 1],1,N);
key=uint8(key);
fileID = fopen('test.bin','a');
for i=1:8:N
end
fclose(fileID);