Tag: 哈希

可靠地在C#中重现用PHP实现的传统密码散列方法

我们正在将在Linux上运行的PHP应用程序迁移到我们在C#中实现并在Windows上运行的新单点登录(SSO)基础架构。 作为迁移过程的一部分,我们需要我们的C#SSO基础架构能够以与PHP应用程序完全相同的方式散列密码。 虽然PHP应用程序使用了一个相当合理的密码散列算法,但是除了密码和salt之外, 不幸的是,得到散列的字符串还包含salt值的余弦值(解释为整数) ……这是一个相当不寻常的决定。 midly。 不出所料,事实certificate,在PHP和C#中计算大整数的余弦导致结果略有不同。 这意味着我们可能无法在新的SSO基础架构中可靠地重新实现传统密码散列算法。 我们考虑的一个解决方案是在AWS Lambda中运行PHP密码散列函数,并从我们的SSO基础架构中查询Lambda。 你能想到其他选择吗?

如何将C#散列字节数组转换为字符串以传递给API?

我有许多值必须组合成SHA256哈希才能传递给Web服务。 使用Encoding.ASCII.GetBytes(allparametershere)将这些值组合成一个字节数组,然后通过myHashMethod.ComputeHash(allParameterByteArray)散列到SHA256。 由于我必须将此值添加到请求标头,因此必须将其作为字符串传递给请求标头。 第三方系统的要求表明它必须是字符串的64字符hex格式。 我以前使用过Convert.Base64String,但我认为这不是他们想要的,因为我只是在传递这样的字符串时会出错。 有任何想法吗? 谢谢!

Bob Jenkins在VB.Net中完善哈希函数

我正在尝试将Bob Jenkins完美的哈希函数从C#转换为VB.Net,我仍然坚持跟随。 a += (UInt32)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24)) 如何在VB.Net中编写上述语句? 请注意以下事项: 一个是UInt32 url是String k是整数 我尝试了以下但它不起作用。 a += url(k + 0) + (url(k + 1) << 8) + (url(k + 2) << 16) + (url(k + 3) << 24) 为避免手动进行类型转换,我使用“Option […]

Asp.net身份哈希安全吗?

我在以下url中引用了以下网站,用于Rijndael和Asp.net哈希实现。 Rijndael – 如何使用密码生成Rijndael KEY和IV? Asp.net哈希 – ASP.NET身份默认密码哈希,它是如何工作的并且它是否安全? 在两个实现中,以下用于获取密码的随机字节。 Rijndael算法 Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(password, SALT); Asp.net身份哈希 Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(providedPassword, salt, HasingIterationsCount) 在上面的代码之后,RijnDael对返回的字节应用加密。 但是asp.net标识将结果复制到salt字节数组并返回散列键。 在这里,我有一个混乱。 RijnDael和Asp.net身份哈希使用相同的Rfc2898DeriveBytes 。 当RijnDael可以解密加密的密钥(这是在Rfc2898DeriveBytes的帮助下完成的),为什么我们可以解密Asp.net Identity哈希密钥? 有可能这样做吗? Asp.net身份是否安全?

使用C#HashSet解决相等不相等的问题

我基于我最近发现的关于Dictionary性能特征,因此我使用Dictionary ,其中bool被忽略但据说我可以使用HashSet 。 例如: Dictionary overlap; class bounds { public float top_left_x, top_left_y, width, height; public bool equal(bounds other) { return upper_left_x + width > other.upper_left_x && upper_left_x other.upper_left_y && upper_left_y < other.upper_left_y + other.height; } public … GetHashCode() { …; } } 在这里,我没有使用等于检查相等,而是重叠,这在其他地方肯定会令人讨厌,但我有理由这样做。 我假设如果可以在O(1)时间内从一个键中查找一个值,那么键也可以从其自身中查找。 所以我可能会将数千个边界重叠并执行此操作: overlap.ContainsKey(new bounds(…)); 如果给定的绑定与集合中的任何其他绑定重叠,则在O(1)时间内找出。 我还想知道如果我改变一个边界的(x,y)位置会发生什么,大概就像删除然后再次将它添加到集合中,性能明智,非常昂贵? 我将什么放入GetHashCode函数? 目标 如果这有效,那么我在使用这种机制后找出给定边界重叠的其他边界。 在这个系统中很少有边界移动,并且在填充集合后没有添加新的边界。 新添加的边界需要能够重叠旧的边界。 […]

Case不区分大小写的字符串哈希(SHA)

我将名称字符串及其SHA1值传递到数据库中。 SHA值用作搜索的索引。 实现完成后,我们要求使搜索名称不区分大小写。 我们确实需要考虑所有语言(汉字是一个真实的用例)。 我知道土耳其测试 。 如何在散列之前将输入字符串转换为不区分大小写? 理想情况下,我希望它等同于InvariantCultureIgnoreCase 。 换句话说,如何使此函数的输出不区分大小写? private byte[] ComputeHash(string s) { byte[] data = System.Text.Encoding.Unicode.GetBytes(s ?? string.Empty); SHA1 sha = new SHA1CryptoServiceProvider(); // returns 160 bit value return sha.ComputeHash(data); } 如果SHA不可能,我可能能够使String.GetHashCode ()工作,但我也没有办法让这种情况不敏感。 我打赌这是不可能的。 如果不是,有什么工作吗?

Telerik Sitefinity密码哈希function

我有一个表格,其中包含Telerik Sitefinity系统的登录凭据。 我想使用相同的登录凭据,但使用不具有Sitefinity库的其他应用程序。 我正在努力使用密码编码,密码编码设置为Hash(默认为SHA1算法)。 我尝试使用以下代码对密码进行编码,但它与Sitefinity生成的内容不匹配。 public string EncodePassword(string pass, string salt) { byte[] bytes = Encoding.Unicode.GetBytes(pass); byte[] src = Convert.FromBase64String(salt); byte[] dst = new byte[src.Length + bytes.Length]; Buffer.BlockCopy(src, 0, dst, 0, src.Length); Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length); HashAlgorithm algorithm = HashAlgorithm.Create(“SHA1”); byte[] inArray = algorithm.ComputeHash(dst); return Convert.ToBase64String(inArray); } 例: 密码:password111 盐:94EBE09530D9F5FAE3D002A4BF262D2F(保存在SF用户表中) 上面的函数哈希:8IjcFO4ad8BdkD40NJcgD0iGloU = SF生成的表中的哈希值:A24GuU8OasJ2bicvT / […]

C#读回加密密码

我正在使用下面的代码将密码保存到注册表中,如何将其转换回来? 下面的代码不是我的,但它加密很好。 谢谢 using System.Security.Cryptography; public static string EncodePasswordToBase64(string password) { byte[] bytes = Encoding.Unicode.GetBytes(password); byte[] dst = new byte[bytes.Length]; byte[] inArray = HashAlgorithm.Create(“SHA1”).ComputeHash(dst); return Convert.ToBase64String(inArray); }

如何从重新实现GetHashCode的类中获取原始哈希代码?

简短问题:如何获取已重新实现GetHashCode()的对象的object.GetHashCode()值? 长话:所以我有大约十万个对象,每个对象共享许多(非编译时)常见字符串。 常见,如果值相等,则它是相同的实例。 知道这一点,我想我宁愿使用标准对象比较( ReferenceEquals )而不是完整的字符串比较 – 特别是因为这些是在相当规律的基础上在字典中查找的。 所以我声明了一个class ReferenceEqualityComparer : IEqualityComparer与Dictionary ,认为无论如何都要有用,并且尝试实现这两种方法。 等于很容易,使用object.ReferenceEquals 。 但是如何获得GetHashCode方法的object.GetHashCode()等价物呢? 即如何获得对象实例的一些表示? 我知道还有其他方法可以做到这一点 – 创建一个InternedString类,它保存对string的引用,但不实现Equals或GetHashCode ,或者存储索引而不是每个对象的字符串,但我现在很好奇 -实际上有一种实现通用ReferenceEqualityComparer吗?

在C#中生成运行哈希(或校验和)?

前言: 我正在进行具有validation提交阶段的数据导入。 我们的想法是:第一阶段允许从各种来源获取数据,然后在数据库上运行各种插入/更新/validation操作。 提交将回滚,但会生成“validation哈希/校验和”。 提交阶段是相同的,但是,如果“validation散列/校验和”相同,则将提交操作。 (数据库将在适当的隔离级别下运行。) 限制: 输入读取和操作仅向前读取一次 不想预先创建流(例如,写入MemoryStream是不可取的),因为可能存在大量数据。 (它适用于我们的服务器/负载,但假装内存有限。) 不想“创造我自己的”。 (我知道可用的代码,如Damien的CRC-32 ,我可以使用/修改,但更喜欢“标准”。) 而我(我想)正在寻找: 一种基于输入+操作生成哈希(例如SHA1或MD5?)或校验和(例如CRC32但希望更多)的方法。 (输入/操作本身可以被散列为更适合校验和生成的值,但是能够“写入steam”会很好。) 所以,问题是: 如何在C#中生成Running Hash(或Checksum)? 此外,虽然可以针对Running操作修改CRC32实现,但是运行SHAx或MD5哈希呢? 我是否缺少某种方便的Stream方法而不是可以用作适配器? (批评是受欢迎的,但也请在适用的情况下回答上述内容。此外,我不想处理线程。;-)