我此前正在考虑这个问题,并想出了一个问题:
“从理论上讲,哈希函数的散列函数,当被散列时,可能会被认为是脆弱的,因为任何字符数组中的空字节都会被解释为C中字符串的结尾?因此作为攻击者,我们可能会忽略我们最初的字符串中的那个字符(可能还有其他字符)来暴力破解?“
很抱歉,如果我对此不是很清楚。
答案 0 :(得分:4)
散列函数的输出通常是固定长度的字节数组(或机器字);它应该被解释为固定长度的数组,而不是零分隔的字符串。
解决方案是在代码中使用memcmp(3)
而不是strcmp(3)
。
答案 1 :(得分:3)
散列函数不会产生字符串(基于字符)输出。它们产生(固定长度)字节数组。如果需要,可以将其转换为Base64或Base16,然后你有一个字符串(它永远不会包含空字节,只有00
)。