我有短String
s(少于10个字符).我将其转换为int
并将其用作主键.(由于小问题,我不能使用String主键.)我知道无限长度的字符串的哈希码可以冲突,但是短字符串也可以冲突吗?
在放入HashMap期间发生冲突时,地图是否已调整大小,或者是添加到该特定存储桶中的列表的条目?
我正在建立一个用户可以上传内容的网站.一如既往,我的目标是世界优势,所以我想避免两次存储相同的文件.例如,如果用户尝试两次上传相同的文件(通过重命名或仅仅忘记她过去所做的事情).
我目前的方法是让跟踪每个上传文件的数据库存储有关每个文件的以下信息:
然后是这三列的唯一索引.使用两个哈希值可以最大限度地降低误报的风险.
所以,我的问题是:两个相同大小的不同("真实世界")文件具有相同的MD5 和 SHA1哈希值的概率是多少?
或者:是否存在类似(非)复杂性的更智能方法?
(我知道概率可能取决于文件大小).
谢谢!
对于在明文/密钥对上工作的给定(对称或非对称)加密算法生成的给定密文,找到产生相同密文的不同明文/密钥对有多难?
两个明文/密钥对导致相同的密文有多难?
导致这个问题的是另一个可能与上述问题无关的问题:
如果您有密文和密钥并希望使用某些解密例程对其进行解密,则例程通常会告诉您密钥是否正确.但它怎么知道呢?它是否在结果明文中寻找某种模式,表明解密是成功的?在一些不同的明文中是否存在另一个关键结果,它包含模式并且还被例程报告为"有效"?
后续问题的灵感来自答案和评论:
如果允许的明文/密钥对限制在以下(或两种)方式中:
1)明文以密钥的KCV(密钥检查值)开始.
2)明文以某些明文/密钥组合的哈希值开始
这会使碰撞发现不可行吗?甚至清楚,这样的明文/密钥存在=
我想为给定的字符串创建一个唯一的哈希值,我想知道md5和sha1的重复哈希是否存在差异.
让我们为了论证假设以下代码:
foo = "gdfgkldng"
bar = "fdsfdsf"
md5(foo)
>>>> "25f709d867523ff6958784d399f138d9"
md5(bar)
>>>> "25f709d867523ff6958784d399f138d9"
Run Code Online (Sandbox Code Playgroud)
sha1和md5之间发生这种情况的概率有差异吗?另外:如果我使用具有大重叠的字符串("blabla1","blabla2")是否有区别?
BTW.我对算法的安全性不感兴趣,我只想创建尽可能唯一的哈希.
当两者之间GUID's
(128位)或SHA1哈希GUID's
(160位)时,是否有更多机会发生冲突?我认为a的可能性较小GUID
(即使有少32位),因为它有一些特殊的机制来确保(几乎,因为没有保证)唯一(例如:timestamp)
注意:我已经知道a GUID
不太可能与另一个发生碰撞GUID
,请不要再讨论这个问题了.
我想根据数组的内容生成唯一标识符.我最初的方法是简单地做:
$key = md5(json_encode($array));
Run Code Online (Sandbox Code Playgroud)
但是,我想绝对确定密钥是唯一的,并且两个不同的数组可能产生相同的md5哈希.目前的想法是:
$key = base64_encode(json_encode($array));
Run Code Online (Sandbox Code Playgroud)
这保证是独一无二的,但产生相当长的钥匙.我可以使用sha512或者这种类型的哈希与md5具有相同的密钥冲突潜力吗?有没有办法生成比base64方法更短的密钥,100%保证是唯一的?
为了100%明确,我的问题是:如何为一组数据生成最短的100%唯一标识符?
我在很多地方都读到过,在 Java 中发生哈希冲突后,它会根据哈希冲突的数量在内部使用链表/树。直到这很好,
但是如何使用“键”取回预期值
对于这个简单的字典 -
Key 1 和 Value "apple" 总是打印为 "1: False"
有没有我忽略的原因?
$ cat dict.py
pairs = {1: "apple",
"orange": [2, 3, 4],
True: False,
None: "True",
}
print(pairs)
Run Code Online (Sandbox Code Playgroud)
* $ python3.8 dict.py
{1: False, 'orange': [2, 3, 4], None: 'True'}
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试对 3d 坐标进行散列,以便为地图的索引创建唯一 ID
我的方法是目前
return hash(x + hash(y + hash(z)));
Run Code Online (Sandbox Code Playgroud)
或者在 C++ 中
struct ChunkHasher
{
std::size_t operator()(FLOAT3 const& vec) const
{
return std::hash<float>()(
vec.x + std::hash<float>()(
vec.y + std::hash<float>() (vec.z)
)
);
}
}chunkHasher;
Run Code Online (Sandbox Code Playgroud)
但问题是我得到的负载哈希冲突的...只是运行这个测试,都vec(0,0,0)
和vec(-1,0,0)
映射到对方
我觉得这应该可行,散列冲突应该只2.32831e-08%
在我粗略计算的时候发生……我错过了什么吗?
编辑:在我的程序执行过程中,无论何时计算,给定的输入都应该散列到相同的输出中,因此不可能在每次调用时更改散列器的某种内部状态
hash-collision ×10
java ×3
hash ×2
hashmap ×2
sha1 ×2
algorithm ×1
c++ ×1
comparison ×1
cryptography ×1
dictionary ×1
encryption ×1
file ×1
guid ×1
hashcode ×1
hashtable ×1
key ×1
md5 ×1
new-operator ×1
php ×1
python ×1
statistics ×1
string ×1
unique ×1