.NET框架附带了6种不同的散列算法:
每个功能都有不同的表现; MD5是最快的,RIPEMD是最慢的.
MD5的优势在于它适用于内置的Guid类型; 它是3型UUID的基础.SHA-1哈希是类型5 UUID的基础.这使得它们非常易于识别.
然而,MD5易受碰撞攻击,SHA-1也容易受到攻击,但程度较轻.
我真的很想回答的具体问题是:
MD5不值得信任吗?在正常情况下,当您使用没有恶意意图的MD5算法且没有任何第三方有任何恶意意图时,您会期望任何冲突(意味着两个任意byte []产生相同的哈希)
RIPEMD比SHA1好多少?(如果它更好)它的计算速度要慢5倍,但散列大小与SHA1相同.
散列文件名(或其他短字符串)时获得非恶意冲突的几率是多少?(例如,2个具有相同MD5哈希值的随机文件名)(使用MD5/SHA1/SHA2xx)一般来说,非恶意冲突的几率是多少?
这是我使用的基准:
static void TimeAction(string description, int iterations, Action func) {
var watch = new Stopwatch();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
static byte[] GetRandomBytes(int count) {
var bytes = new byte[count];
(new Random()).NextBytes(bytes);
return bytes;
}
static void …Run Code Online (Sandbox Code Playgroud) 我目前正在使用SHA1来缩短网址:
Digest::SHA1.hexdigest("salt-" + url)
Run Code Online (Sandbox Code Playgroud)
仅使用SHA1的前8个字符作为唯一标识符是多么安全,就像GitHub明显提交的一样?