Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在openssl中生成16位哈希值的最佳加密哈希函数是什么?_C_Openssl_Sha_Sha256_Cryptographic Hash Function - Fatal编程技术网

C 在openssl中生成16位哈希值的最佳加密哈希函数是什么?

C 在openssl中生成16位哈希值的最佳加密哈希函数是什么?,c,openssl,sha,sha256,cryptographic-hash-function,C,Openssl,Sha,Sha256,Cryptographic Hash Function,我在考虑只使用SHA256,然后只使用结果的前两个字节。这种方法有什么问题吗 注意:这里关注的不是恶意攻击,而是确保针对随机位翻转的最佳保护。任何满足的哈希(即,如果输入中有任何位被翻转,则输出中的每一位都将以50%的概率被翻转)都可以这样使用,这包括所有常用的加密散列,包括SHA512。使用非常短的散列有安全隐患,但是如果它们真的不相关,正如您所说的,您可以自由选择可用的最快散列(可能是MD5) P>因为短散列将特别容易受到生日悖论的影响,尽管如此,还是要考虑使用更长的散列。如果生成的哈希数

我在考虑只使用SHA256,然后只使用结果的前两个字节。这种方法有什么问题吗


注意:这里关注的不是恶意攻击,而是确保针对随机位翻转的最佳保护。

任何满足的哈希(即,如果输入中有任何位被翻转,则输出中的每一位都将以50%的概率被翻转)都可以这样使用,这包括所有常用的加密散列,包括SHA512。使用非常短的散列有安全隐患,但是如果它们真的不相关,正如您所说的,您可以自由选择可用的最快散列(可能是MD5)


<> P>因为短散列将特别容易受到生日悖论的影响,尽管如此,还是要考虑使用更长的散列。如果生成的哈希数太多,16位与256位之间的差异非常显著,即使没有恶意攻击者,您也会遇到重复的数据。

一般来说,这听起来是个坏主意,因为如果您不使用哈希函数的整个输出,哈希函数的设计并不是为了防止冲突。@Gabriel那么什么是更好的主意呢?16位很容易被强制执行。如果你不能投资更多的比特数,甚至不要费心尝试“加密安全”。如果你想防止随机比特翻转,也许加密哈希不正确-奇偶校验方案或更高级的ECC校验和可能更好。@Matt这取决于你的块有多大,你期望的错误有多少(即你的通道有多嘈杂)以及您希望能够多可靠地检测到它们。我可以只获取MD5哈希的前16位吗?或者使用它的一个子集是一个坏主意吗?使用适当的加密哈希并没有本质上的不安全性,MD5尽管发现了它的弱点,但它是;但就像我说的,你几乎肯定不想那样做。你的问题真的不可能回答。我们不知道你的标准是什么,据我所知,没有人真正研究过你计划使用的“切碎”MD5的行为,而不是你计划使用它的方式。答案取决于太多的因素。如果这是你关心的问题,为什么不使用正确的错误检测算法呢?@NikBougalis,严格的雪崩标准保证切碎这样的加密散列是安全的。但是你是对的,他应该使用一个正确的错误检测算法来代替。@Cairnarvon不,它没有提到这个方案的安全性。它说,如果一个输入位被补充,每个输出位都有50%的翻转概率。虽然这可能表明切碎散列可以用于“随机位翻转”错误,但实际上并不十分清楚这如何有助于错误检测。MD5首先满足SAC吗?