Tag: 哈希

为什么“int”和“sbyte”GetHashCode函数会生成不同的值?

我们有以下代码: int i = 1; Console.WriteLine(i.GetHashCode()); // outputs => 1 除了sbyte和short之外,C#中的所有整数类型都是有意义的。 那是: sbyte i = 1; Console.WriteLine(i.GetHashCode()); // outputs => 257 为什么是这样?

如何使用C#在SQL Server数据库中存储哈希?

我正在尝试建立一个具有登录/注销function的网站,并且我计划正确散列和保存密码。 然而,我面临的问题是如何将密码存储在数据库中。 我知道我需要将散列+盐渍密码存储在数据库中(不是以纯文本或纯文本加密),但我不知道如何在技术上将二进制数据插入到数据库中。 在我早期的尝试中,我可以在数据库中获取数据的唯一方法是将二进制数据转换为base64字符串并插入varchar密码字段,但有些事情告诉我这不是正确的方法。 数据库中的密码字段当前是varchar但据我所知,散列密码是二进制的。 所以,即使我将密码字段更改为二进制对象,我仍然不知道如何实际插入它! 如果我没有任何意义,请要求澄清,我会回复你。

C#Hash SHA256Managed不等于TSQL SHA2_256

我使用哈希密码和盐(用户名)。 问题是c#的散列值不等于我通过TSQL脚本添加到数据库的初始值。 TSQL: UPDATE [Users] SET Password = HASHBYTES(‘SHA2_256’, ‘test123’+UPPER([UserName])) GO; C#: var passBytes = new UnicodeEncoding().GetBytes(pass); var saltBytes = new UnicodeEncoding().GetBytes(userName.ToUpper()); var dataToHash = new byte[passBytes.Length + saltBytes.Length]; Array.Copy(passBytes, dataToHash, passBytes.Length); Array.Copy(saltBytes, dataToHash, saltBytes.Length); var sha = new SHA256Managed(); return sha.ComputeHash(dataToHash); 我想这与编码有关。 但我不知道如何解决这个问题。 UserName是varchar(50) DB是现有的,因此更改varchar将不那么容易。 我已经尝试过: UPDATE [Users] SET Password = HASHBYTES(‘SHA2_256’, N’test123’+UPPER([UserName])) GO;

C#哈希

我是C#的新手 我如何使用C#散列文件 什么是可用的? (md5,crc,sha1等) 我应该inheritance一个接口吗? 基本上我想校验多个文件并将其存储在数据库中,同时使用我自己的两个校验和/哈希值。

这是散列密码的安全方法吗?

您能告诉我以下是否是安全地散列密码以存储在数据库中的好方法: public string CreateStrongHash(string textToHash) { byte[] salt =System.Text.Encoding.ASCII.GetBytes(“TeStSaLt”); Rfc2898DeriveBytes k1 = new Rfc2898DeriveBytes(textToHash, salt, 1000); var encryptor = SHA512.Create(); var hash = encryptor.ComputeHash(k1.GetBytes(16)); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { sb.Append(hash[i].ToString("x2")); } return sb.ToString(); } 提前谢谢了。

保存文件时计算哈希值?

我有一个inputStream ,我想用它来计算哈希并将文件保存到磁盘。 我想知道如何有效地做到这一点。 我是否应该使用某些任务同时执行此操作,是否应将流传递复制到两个流,一个用于saveFile方法,另一个用于computeHash方法,或者我应该执行其他操作?

我有错误的哈希值? C#密码学

我的文本文件说快速的棕色狐狸跳过懒狗,但是当我尝试从这个文件中获取哈希值时,md5和sha1都与wikipedias结果不同。 我有3个问题。 1)我在代码中做错了什么? 2)我怎样才能更好地使用这段代码? (我需要初始化)3)我如何加盐? { const int bufSize = 1024 * 8; int read; byte[] buf = new byte[bufSize]; string fn = @”b.txt”; byte[] result1 = new byte[0]; byte[] result2 = new byte[0]; SHA1 sha = new SHA1CryptoServiceProvider(); MD5 md5 = new MD5CryptoServiceProvider(); sha.Initialize(); md5.Initialize(); FileStream fin = File.OpenRead(fn); while ((read = fin.Read(buf, 0, […]

C#中带有两个哈希函数的字典?

我有一个巨大的(>> 10米)条目列表。 每个条目都提供两个哈希函数: 便宜:快速计算哈希值,但其分布很糟糕(可能将99%的项目放在1%的哈希空间中) 昂贵:需要花费大量时间进行计算,但分布也要好得多 普通的字典让我只使用其中一个哈希函数。 我想要一个首先使用廉价哈希函数的字典,并在碰撞中检查昂贵的哈希函数。 为此,在词典中使用字典似乎是个好主意。 我目前基本上使用这个怪物: Dictionary<int, Dictionary<int, List>>; 我改进了这个设计,所以只有当实际上有两个相同的廉价哈希项时才会调用昂贵的哈希。 它完美地适合我,并为我做了一个完美的工作,但它看起来应该已经死了6500万年前。 据我所知,此function未包含在基本框架中。 我即将写一篇DoubleHashedDictionary类,但我想先了解你的意见。 至于我的具体情况: 第一个哈希函数=文件系统目录中的文件数(快)第二个哈希函数=文件大小的总和(慢) 编辑: 更改了标题并添加了更多信息。 添加了非常重要的缺失细节

在C#中生成XML文档哈希

在C#中散列XML文档的最佳方法是什么? 我想散列一个XML文档,以便我可以判断它是否从生成时手动更改。 我没有使用它来保证安全性 – 如果有人更改了XML,并且更改了哈希以匹配,那就没关系了。 例如,我会对根的子节点进行哈希并将哈希存储为根的属性:

写入流时计算哈希值

我目前正在创建需要签名的加密文件格式。 为此,我需要计算我写入流的内容的哈希码。 在.net框架中有许多可以使用的哈希算法,并且它工作正常,但它需要我处理流三次。 byte[] content = new byte[] { 0, 1, 2, 3, 4, 5, 6 }; using (Stream fileStream = File.Open(“myfile.bin”, FileMode.Create)) { //Write content fileStream.Write(content, 0, content.Length); } byte[] hashValue = null; using (Stream fileStream = File.Open(“myfile.bin”, FileMode.Open)) { HashAlgorithm hash = SHA256.Create(); hashValue = hash.ComputeHash(fileStream); } using (Stream fileStream = File.Open(“myfile.bin”, FileMode.Append)) […]