【发布时间】:2014-06-21 16:41:27
【问题描述】:
我正在尝试使用 Salt 和密码实现加密。因为推荐的 Salt 大小是 64 位,所以我声明了。
char Salt[8];
我使用 RAND_pseudo_bytes 以这种方式获得随机盐:
RAND_pseudo_bytes((unsigned char*)Salt, sizeof Salt);
而且因为每次编译时 hexdump 输出的长度都不同(有时是 5 个,主要是 24 个字节),因为我错误地使用了 sizeof 的 strlen 插入:
RAND_pseudo_bytes((unsigned char*)Salt, strlen(Salt));
我尝试了以下行来弄清楚发生了什么:
printf("\n%d\n",strlen(Salt));
每次输出 24 个。
所以,我的问题是:为什么当我声明 Salt 的长度为 8(sizeof(Salt)=8) 时 strlen(Salt)=24?我会理解 9(带有 '\0',虽然不完全确定这将如何发生),但 24 让我觉得很奇怪。谢谢。
【问题讨论】:
-
大概是因为您没有以 null 结尾的字符串,所以您正在调用 未定义的行为。