相关疑难解决方法(0)

我应该选择哪种加密哈希函数?

.NET框架附带了6种不同的散列算法:

  • MD5:16字节(哈希时间500MB:1462毫秒)
  • SHA-1:20个字节(1644毫秒)
  • SHA256:32字节(5618毫秒)
  • SHA3​​84:48字节(3839毫秒)
  • SHA512:64字节(3820毫秒)
  • RIPEMD:20个字节(7066毫秒)

每个功能都有不同的表现; 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)

.net c# hash cryptography cryptographic-hash-function

135
推荐指数
3
解决办法
7万
查看次数

C#中的哈希密码?Bcrypt/PBKDF2

我查询了msdn和其他资源如何做到这一点,但我想出了没有明确的解决方案.这是我找到的最好的http://blogs.msdn.com/b/shawnfa/archive/2004/04/14/generating-a-key-from-a-password.aspx?Redirected=true

我想使用bcrypt或PBKDF2(看起来与bcrypt相关)在C#中散列密码.我想试验一下我的计算机散列密码需要多少轮.然而,一切似乎都是关于加密,而每个人都谈论哈希.我无法弄清楚.我如何哈希密码?它看起来更像PBKDF2(Rfc2898?)是一个随机数生成器,我使用GetBytes(金额)来选择我的散列大小有多大.

我糊涂了.我究竟如何用bcrypt/PBKDF哈希密码?

.net c# passwords hash bcrypt

36
推荐指数
4
解决办法
4万
查看次数

安全密码哈希

我需要在.Net WinForms应用程序中存储单个密码的哈希值.

什么是最安全的方法?

特别是:

  • 盐,HMAC,还是两者兼而有之?
  • 盐多少钱?
  • 多少次迭代?
  • 什么编码?(密码是纯ASCII)

我假设算法应该是SHA512或HMACSHA512.

.net security passwords hash

17
推荐指数
3
解决办法
7580
查看次数

winapi的bcrypt.h实际上是否支持bcrypt哈希?

这可能听起来像一个奇怪的问题,我实际上不得不问这个问题感觉有点奇怪,但是花了几个小时查看MSDN文档以了解bcryptVista中添加的例程,我几乎得出结论:没有实际的bcrypt支持!

根据维基百科:

bcrypt是一个基于Blowfish密码的密码的自适应加密哈希函数...除了结合盐来防止彩虹表攻击之外,bcrypt是一个自适应哈希:随着时间的推移,它可以变得越来越慢,所以它仍然具有抵抗力针对哈希和盐的特定暴力搜索攻击.

但是,从MSDN上的文档来看,"bcrypt"库显然实际上是加密和散列的通用接口.您必须通过BCryptOpenAlgorithmProvider函数获取"算法提供程序"的句柄,该函数有几个内置算法可供选择.但是"河豚"这个词并没有出现在名单的任何地方.

我错过了什么吗?我读错了吗?或者Windows的"bcrypt"库实际上不支持bcrypt吗?

windows winapi windows-vista cng

10
推荐指数
2
解决办法
1978
查看次数