二进制安全是什么意思?
二进制安全是指,在传输数据时,保证二进制数据的信息安全,也就是不被篡改、破译等,如果被攻击,能够及时检测出来。
二进制安全包含了密码学的一些东西,比如加解密、签名等。
举个例子,你把数据11110000加密成10001000,然后传给我,就是一种二进制安全的做法。
作用
c中的strlen函数就不算是binary safe的,因为它依赖于特殊的字符‘\0‘来判断字符串是否结束,所以对于字符串str = "1234\0123"来说,
strlen(str)=4
而在php中,strlen函数是binary safe的,因为它不会对任何字符(包括‘\0‘)进行特殊解释,所以在php中,
strlen(str)=8
redis中SDS的实现保证了redis保存的数据是二进制安全的.
C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外,字符串里面不能包含空字符,否则最先被程序读入的空字符将被误认为是字符串结尾,
这些限制使得C字符串只能保存文本数据,而不能保存像图片、音频、视频、压缩文件这样的二进制数据。
它并不像C语言那样,使用‘\0‘作为判定一个字符串的结尾,而是使用了独立的len,这样可以保证即使存
储的数据中有‘\0‘这样的字符,它也是可以支持读取的
struct sdshdr {
int len;
int free;
char buf[];
};
因为有了对字符串长度定义len, 所以在处理字符串时候不会以零值字节(\0)为字符串结尾标志.
二进制安全就是输入任何字节都能正确处理, 即使包含零值字节
struct sdshdr {
int len;//记录buf数组大小
int free;//记录buf数组还有多少可用空间
char buf[];//字符串实体,保存字符串的内容
};
原文:https://www.cnblogs.com/zzhoo/p/12512233.html