我正在创建一个简单的Web应用程序,并希望将散列密码存储到数据库中.我也需要身份验证令牌的哈希函数(连接用户名和日期,并将它们的哈希值作为令牌发送给客户端).
我发现MessageDigest Java类可以帮助我解决这个问题.这是一个链接.基本想法是这样的:
public String digestString (String stringToHash) throws NoSuchAlgorithmException {
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] stringBytes = stringToHash.getBytes();
byte[] stringDigest = sha256.digest(stringBytes);
return new String(stringDigest);
}
Run Code Online (Sandbox Code Playgroud)
我得不到的是: 在这段代码中,我该如何设置哈希键?我需要确保在验证过程中使用相同的密钥.如果我没有设置密钥,我怎么能这样做?
顺便说一句:我知道我应该在哈希值之前添加一个盐(在这种情况下为256字节)到散列文本.
是否可以为具有特定属性的数据结构创建无冲突哈希函数.
最大的问题是这个哈希函数也应该非常快.有没有办法创建这样的哈希函数?也许在运行时取决于整数范围?
附加:我应该说这个哈希函数的目的是要快速检查是否处理了特定的组合.因此,当处理数据结构中的某些数字组合时,我会计算哈希值并存储它.然后,当处理数据结构中的另一个数字组合时,我将比较散列值.
可能重复:
如果MD5坏了,什么是更好的解决方案?
MD5中有哪些漏洞以及它们的一些补救措施是什么?此外,非技术人员应该具备的一些问题以及技术人员与MD5相关的一些问题是什么?
我有一个表单,其中包含名称属性username的文本框和另一个名称为attribute password的表单.我还有一个名为user和pass的数据库.当我的用户注册时,它将用户列的用户名和密码添加到传递列.
我如何制作一个MySQL查询来检查表单是否提交了正确的用户名和密码,然后如果它确实有一个分支让我输入代码,如果它成功了?
我真的需要一些代码,这一点并不顺利我知道它应该是类似的东西SELECT * FROM table WHERE username == $username AND...然后我被卡住了因为我在数据库中有一个MD5密码,并且第一位可能是错误的.请帮忙.:)
谢谢
我正在编写一个对等应用程序,我需要一个哈希函数来存储java哈希集中的IP /端口对.而不是重新发明轮子我想知道是否已经有解决方案,但谷歌没有产生太多.
任何人都可以推荐IPv4的哈希函数(奖金,如果它也适用于IPv6!)和远程端口号?
除非客户端在同一主机上,否则端口号可能是相同的,在这种情况下它将是顺序的.
我有一个长度为128个字符的布尔字符串(如"01100..001")(表示128个数字为0/1).我在Java中搜索一个高效(快速)的哈希函数,它产生的表示比128位低得多,而且碰撞明显减少.任何人都可以帮助我,有没有这样的哈希函数?有什么建议吗?
我想将我的用户分成几组来运行A/B测试.
通常的方法是将每个用户随机分配给变量并存储该关系直到A/B测试结束.但这会迫使我在某处存储该关联,我想避免它.
由于用户已在我的应用程序中注册,我希望有一个功能可以在我的测试中统一分发用户,这样我就可以在A/B测试中获得非偏斜的结果.
我应该使用哪种哈希函数?
我正在学习有关哈希表,哈希地图等我刚刚实施了哈希表在C,与操作:insert(HTable, key),delete(HTable, key),initialize(HTable)和search(HTable, key)。
我想问一件事。由于在(适当的)哈希表中,计算出的哈希索引可能非常大,这是否意味着消耗的空间会像INT_MAX(当然仍然是 O(n))或更多?我的意思是给定我们想要存储在哈希表中的输入元素(即插入它),insert() 函数将调用哈希函数,然后该函数将计算要进入的元素的哈希索引。因此它将使用哈希函数来找到这个索引。
当我们使用哈希函数对元素进行操作时,哈希索引可能会变得非常大。使用适当的,例如加密哈希函数,这个索引可能会变得很大(他们使用 300 位的素数 - Diffie Hellman 公钥密码学等),对吧?我知道在普通的散列函数(例如初学者用来学习的琐碎函数)中,我们应用 mod 操作以使元素适合散列表的边界,但这样做,也许我们限制了散列函数的潜力?
因此,要将元素唯一地映射到哈希表,我们必须使用一个巨大的哈希表。这些加密哈希表是如何实现的?它们必须是完全安全的,对吧?甚至“cryptographichashfunction”上的 Stack Overflow 标签也表示,极不可能找到将映射到同一元素的两个输入(因此冲突的可能性很小)。这不需要将一个巨大的数组存储在内存(或磁盘)中吗?因此,内存消耗将是巨大的。
当然,时间复杂度不是问题。我们只是看到哈希表/数组的起始地址加上索引,然后去内存中的那个地方获取值(O(1) - 哈希表的搜索原理)。
我在某处错了吗?有什么我想念的吗?我希望我说清楚了。总而言之,我想对此进行确认。一个好的散列函数是否需要一个巨大的数组(散列表)以及如此大量的内存才能正确实现?这么多空间是合理的,还是有什么我不太明白的地方?谢谢。
hash cryptography hash-function hashtable cryptographic-hash-function
为什么建议在单独链接中将负载因子设为 1?
我看到很多人说它是推荐的,但没有给出明确的解释原因。
在开放寻址中,我知道负载因子应该在 0.5 到 0.7 之间,因为在处理冲突时找到未占用的索引应该是一个快速的操作。但我不明白为什么在单独链接中负载因子为 1 应该更好。我的意思是,如果我有一个大小为 100 的表,是否还有机会将所有 100 个元素散列到相同的索引并放在同一个列表中?天啊,我真的无法理解为什么这个单独链接的特定负载因子应该是 1。
上周我正在学习哈希表,但我想知道为哈希基选择的最佳值是什么,以及哈希函数的表大小,以便它能够在良好的时间复杂度上运行。
这是我的哈希函数的代码:
h = 0
for i in range(len(key)):
h = (h * hashBase + ord(key[i])) % tableCapacity
return h
Run Code Online (Sandbox Code Playgroud)
为什么选择 hashBase = 1 会增加哈希表操作的时间复杂度?为什么选择大桌子容量更好?另外,为什么 ie。hashBase = 250726 和表容量 = 250727 导致其操作变慢?
hash-function ×10
cryptography ×3
hash ×3
hashtable ×3
java ×3
ab-testing ×1
abtest ×1
algorithm ×1
cryptographic-hash-function ×1
hashset ×1
ip-address ×1
load-factor ×1
md5 ×1
mysql ×1
php ×1
port ×1
python ×1
statistics ×1