Tag: hash

是否有针对.NET的FIPS兼容的密钥SHA256哈希算法?

我正在使用HMACSHA256创建一个带键的SHA256哈希,代码如下: HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secretKey); byte[] hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(data)); string hashResult = string.Empty; for (int i = 0; i < hash.Length; i++) { hashResult += hash[i].ToString("x2"); // hex format } 这工作得很好,但是,它在启用FIPS的环境中失败,因为HMACSHA256使用的底层SHA256Managed实现本身不符合FIPS。 通过MSDN文档搜索,我发现KeyedHashAlgorithm的唯一SHA256实现是HMACSHA256。 我需要使用键控SHA256哈希来签署Web服务请求(因此我无法更改哈希类型),并且我必须能够在启用FIPS的环境中运行。 谷歌搜索显示SHA256CryptoServiceProvider和SHA256Cng都是符合FIPS标准的创建SHA256哈希的方法,但似乎都不支持创建键控哈希。

密码哈希 – 为什么要盐60,000次

我正在为一家财富100强企业工作,我将面临从SHA1到SHA-2的安全任务。 这不是我的专业领域,但在我研究密码学时,我质疑过时的信息…… 显然需要SHA-2而不是SHA-1,但是当安全团队知道密码+盐的散列使用SHA时,GPU在破解数十亿个哈希时非常快速 – 我不知道为什么密码我不是被告知使用bcrypt或其他慢速的等效物,为什么? 我看到了一张幻灯片,我被告知要制作我的盐60,000次。 我搜索了整个互联网,我没有看到任何这样的建议或例子。 为什么? 我正在使用C# string SaltAndPwd = string.Concat(plainTextPassword, salt); SHA256 sha2 = SHA256Managed.Create(); byte[] buff = sha2.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd)); 我想我并没有被告知反复创建一个盐,而是一遍又一遍地创建哈希。 这个逻辑是否合适? string plainTextPassword = “aF7Cvs+QzZKM=4!”; string salt = “o9kc5FvhWQU==”; SHA256 sha2 = SHA256Managed.Create(); for(var i = 0; i <= 60000; i++) { byte[] buff = sha2.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd)); } 如何使此散列正常工作? 更新发现了powerpoint幻灯片 使用代码更新 – validation哈希的实现问题 […]

如何在C#/ Bouncy Castle中创建PBKDF2-SHA256密码哈希

我需要创建一个PBKDF2-SHA256密码哈希,但是遇到了一些麻烦。 我下载了Bouncy Castle的回购,但是在unit testing中找到了我想要的东西。 在这里找到了一些示例代码,但这只是SHA1。 代码的关键位是: /// /// Computes the PBKDF2-SHA1 hash of a password. /// /// The password to hash. /// The salt. /// The PBKDF2 iteration count. /// The length of the hash to generate, in bytes. /// A hash of the password. private static byte[] PBKDF2(string password, byte[] salt, int iterations, int […]

HashAlgorithm.ComputeHash()有状态吗?

我需要独立计算多个数据块的哈希值。 像这样的东西: using( HashAlgorithm hasher = new ActualHashAlgorithm() ) { for( int i = 0; i = numberOfBlocks; i++ ) { byte[] block = getBlock( i ); byte[] hash = hasher.ComputeHash( block ); // use hash } } 我可以在块之间重用相同的HashAlgorithm对象吗? HashAlgorithm会在调用ComputeHash() HashAlgorithm重置状态,还是需要处理HashAlgorithm对象并为每个新数据块创建一个新对象?

Rfc2898DeriveBytes(PBKDF2)实现中密钥大小的重要性

这是我使用.NET中提供的Rfc2898DeriveBytes类来“散列”(或导出 PKCS标准的PBKDF2实现中调用的密钥 )密码字符串的代码 : int saltSize = 256; int iterations = 1000; int keySize = 20; // The parameter I’m not sure of var deriveBytes = new Rfc2898DeriveBytes(“mypassword”, saltSize, iterations); byte[] salt = deriveBytes.Salt; byte[] key = deriveBytes.GetBytes(keySize); 现在,我知道盐的大小并不重要(只要它足以确保随机盐是独特的),但关键尺寸呢? 更长的密钥是否能提供更强的安全性来抵御攻 (笔记: 1.性能问题不在我这里导入,显然更长的盐或更长的密钥将花费更多的时间让GetBytes返回一个值。 2.我想使用这个“哈希”将它们存储在数据库中,而不是在加密方案中使用它们)

c#如何计算对象的哈希码?

这个问题来自关于元组的讨论。 我开始考虑元组应该具有的哈希码。 如果我们接受KeyValuePair类作为元组怎么办? 它不会覆盖GetHashCode()方法,所以可能它不会知道它的“子”的哈希码…所以,运行时将调用Object.GetHashCode(),它不知道真实的对象结构。 然后我们可以创建一些引用类型的实例,它们实际上是Equal,因为重载的GetHashCode()和Equals()。 并将它们用作元组中的“孩子”来“欺骗”字典。 但它不起作用! 运行时以某种方式计算出我们元组的结构并调用我们类的重载GetHashCode! 它是如何工作的? Object.GetHashCode()的分析是什么? 当我们使用一些复杂的密钥时,它会在某些不好的情况下影响性能吗? (可能,不可能的情况……但仍然) 以此代码为例: namespace csharp_tricks { class Program { class MyClass { int keyValue; int someInfo; public MyClass(int key, int info) { keyValue = key; someInfo = info; } public override bool Equals(object obj) { MyClass other = obj as MyClass; if (other == null) […]

始终生成对象的哈希值

我正在尝试获取对象的哈希值(md5或sha)。 我实现了这个: http : //alexmg.com/post/2009/04/16/Compute-any-hash-for-any-object-in-C.aspx 我正在使用nHibernate从数据库中检索我的POCO。 在此运行GetHash时,每次从数据库中选择并保湿时,它都会有所不同。 我想这是预期的,因为底层代理会改变。 无论如何, 有没有办法在对象上获得所有属性的哈希值,每次都是一致的? 我已经玩弄了在这个.GetType()。GetProperties …..上使用StringBuilder并在其上创建哈希的想法,但这看起来效率低下? 作为旁注,这是用于将这些实体从一个数据库(RDBMS)更改跟踪到NoSQL存储(比较哈希值以查看rdbms和nosql之间是否更改了对象)

在流上腌制C#MD5 ComputeHash

我看不出任何方法来加密MD5.ComputeHash(Stream)。 我错过了一些将字节注入HashAlgorithm的方法吗? 我在执行流计算之前尝试执行ComputeHash(byte []),但不出所料,它没有任何效果。 任何想法(除了修改文件)? 谢谢你的时间。 附录只是为了更具体一点,我想使用一个流来获取我不想加载到内存中的大文件的哈希值。 FileInfo myFI= new FileInfo(“bigfile.dat”); FileStream myIFS = piFile.OpenRead(); MD5 md5 = MD5.Create(); byte[] hash = md5.ComputeHash ( myIFS ); myIFS.Close ();

如何选择素数来计算哈希码?

这个问题遵循Jon Skeet在这个问题上给出的答案:“ 覆盖System.Object.GetHashCode的最佳算法是什么? ”。 要计算哈希码,请使用以下算法: public override int GetHashCode() { unchecked // Overflow is fine, just wrap { int hash = 17; // Suitable nullity checks etc, of course 🙂 hash = hash * 23 + field1.GetHashCode(); hash = hash * 23 + field2.GetHashCode(); hash = hash * 23 + field3.GetHashCode(); return hash; } } […]

在ASP.net中复制PHPBB密码哈希c#

我目前正在使用phpbb 3.0.8。 它拥有3,000名用户和约60,000个post。 我正在将论坛改为另一个,用经典的ASP编写(我知道人们会对此不赞成,但我有充分的理由)。 我的网站是用ASP.net编写的。 经典的ASP论坛有一个连接它的API。 我把所有这些都设置好了,它运行正常。 我已经写了自己的登录表单。 我想复制所有用户帐户。 目前的论坛有表: Username | Password | Hash | Salt 我已经覆盖了经典的ASP哈希技术,现在使用ASP.net Security.SHA1哈希。 密码存储为SHA1(rawpassword + salt) 。 我的计划是将新字段存储在当前字段旁边: UserID | Password | Hash | Salt | PHPBBHash 当用户登录时,如果设置了PHPBB hashh字段,则会使用PHPBB哈希哈希密码。 然后,如果登录成功,它将删除PHPBBHash字段,并创建当前系统哈希值。 这样,这是从PHPBB到新论坛的平稳过渡,没有人丢失他们的帐户。 我的问题是,给定PHPBB哈希,用户名和密码,在ASP.net中c#如何validationPHPBB哈希? 它是如何计算的? 我担心的是经典的ASP哈希函数声称是SHA1,但它产生了与Securiy.SHA1不同的结果。 编辑 如果有人能给我一个明确的解决方案,我会对此表示赏心悦目,我很欣赏链接到资源的答案,但我仍然在努力理解它。 测试用例 原始密码: blingblangblaow222 在PHPBB3数据库中: username: Tom username_clean: tom user_password: $H$9ojo08A3LuhnkXR27p.WK7dJmOdazh0 user_passchg: 1301433947 user_form_salt: […]