从字符串生成好的heroku-ish哈希
hasheroku的Python项目详细描述
hasheroku
==
传统的散列看起来无聊而平凡?
不能忍受他们发霉的十六进制字符串的无情吗?把剃刀放下:我们有东西给你代码::python
hasheroku('hashing goes banas!')#->;“悸动的山”
hasheroku(“hashing变成香蕉。”)->;“夏季霜冻”
hasheroku(“hasheroku变成香蕉!”)#->;“枯萎的星星”
哈塞罗库(一切都变得疯狂!)#->;“冰雷”
:代码:`hasheroku`使用heroku命名约定,将字符串散列成很好的散列。
这就像heroku random names`generator`,但却是散列函数!
**免责声明**:只有64x64=4096个Heroku名称的唯一组合,因此*会有很多冲突*
这就是为什么在生成大量散列的情况下,永远不要使用裸Heroku散列(即没有十六进制后缀-解释为“below”的情况)!
…_生成器:https://github.com/usmanbashir/haikunator
…_下面:https://github.com/universome/hasheroku#用法
代码::bash
用法
==
代码::python
hasheroku('我喜欢散列!')#->;“旧嘉年华”
您可以使用自己的分隔符,分隔符的参数为:code:`separator'
代码::python
hasheroku('我喜欢散列!',分隔符=“~”)->;“旧的~fiesta”
hasheroku('maaan,谁不喜欢散列?!','')->;'挥之不去的阴影'
代码::python
hasheroku('我喜欢散列!',后缀_len=5)->;'old-fiesta-cd298'
hasheroku('我喜欢散列!',10,“~”)#->;“旧的~fiesta~cd29895f2a”
hasheroku('Maaan,谁不喜欢hashes?!',30,,,)->;'挥之不去的阴影a7c1c6cd56a755c3e87d9b667ef9dd'
在这种情况下,当然,您失去了人类可读哈希的所有魅力,只能使用传统哈希函数。
==
是首先,我们得到字符串的SHA256散列,然后将它的前4个十六进制字符投射到Heroku形容词和名称中。
只要这4个字符是均匀分布的(它们是均匀分布的),并且我们正确地投射它们(我们确实如此)-我们的散列也是均匀分布的。
当然,问题是,有那么多可能的名字,这就是为什么我们会有很多碰撞。
==
。。| ss | raw::html
<;strike>;
| se raw::html
<;strike>;
如果你觉得自己与生活无关,你可以为这个项目做出贡献。
做以下事情会很酷:
*为一致性编写一个适当的测试。有一个kolmogorov-smirnov检验来检查随机变量是否一致,但它只适用于连续变量。我也不知道如何检查同一件事的离散性(友好的,我没有谷歌这么多,因为我有点SS懒惰SE忙)。
*添加更多的名字和形容词。一切都会如何减少碰撞。目前,我只硬编码了64个形容词/名字的用法。为了正确地采样,我想我们应该对sha256进行二进制摘要,并使用“this”。_网址:https://stats.stackexchange.com/questions/70073/generating-discrete-uniform-from-coin-flips
==
传统的散列看起来无聊而平凡?
不能忍受他们发霉的十六进制字符串的无情吗?把剃刀放下:我们有东西给你代码::python
hasheroku('hashing goes banas!')#->;“悸动的山”
hasheroku(“hashing变成香蕉。”)->;“夏季霜冻”
hasheroku(“hasheroku变成香蕉!”)#->;“枯萎的星星”
哈塞罗库(一切都变得疯狂!)#->;“冰雷”
:代码:`hasheroku`使用heroku命名约定,将字符串散列成很好的散列。
这就像heroku random names`generator`,但却是散列函数!
**免责声明**:只有64x64=4096个Heroku名称的唯一组合,因此*会有很多冲突*
这就是为什么在生成大量散列的情况下,永远不要使用裸Heroku散列(即没有十六进制后缀-解释为“below”的情况)!
…_生成器:https://github.com/usmanbashir/haikunator
…_下面:https://github.com/universome/hasheroku#用法
代码::bash
用法
==
代码::python
hasheroku('我喜欢散列!')#->;“旧嘉年华”
您可以使用自己的分隔符,分隔符的参数为:code:`separator'
代码::python
hasheroku('我喜欢散列!',分隔符=“~”)->;“旧的~fiesta”
hasheroku('maaan,谁不喜欢散列?!','')->;'挥之不去的阴影'
代码::python
hasheroku('我喜欢散列!',后缀_len=5)->;'old-fiesta-cd298'
hasheroku('我喜欢散列!',10,“~”)#->;“旧的~fiesta~cd29895f2a”
hasheroku('Maaan,谁不喜欢hashes?!',30,,,)->;'挥之不去的阴影a7c1c6cd56a755c3e87d9b667ef9dd'
在这种情况下,当然,您失去了人类可读哈希的所有魅力,只能使用传统哈希函数。
==
是首先,我们得到字符串的SHA256散列,然后将它的前4个十六进制字符投射到Heroku形容词和名称中。
只要这4个字符是均匀分布的(它们是均匀分布的),并且我们正确地投射它们(我们确实如此)-我们的散列也是均匀分布的。
当然,问题是,有那么多可能的名字,这就是为什么我们会有很多碰撞。
==
。。| ss | raw::html
<;strike>;
| se raw::html
<;strike>;
如果你觉得自己与生活无关,你可以为这个项目做出贡献。
做以下事情会很酷:
*为一致性编写一个适当的测试。有一个kolmogorov-smirnov检验来检查随机变量是否一致,但它只适用于连续变量。我也不知道如何检查同一件事的离散性(友好的,我没有谷歌这么多,因为我有点SS懒惰SE忙)。
*添加更多的名字和形容词。一切都会如何减少碰撞。目前,我只硬编码了64个形容词/名字的用法。为了正确地采样,我想我们应该对sha256进行二进制摘要,并使用“this”。_网址:https://stats.stackexchange.com/questions/70073/generating-discrete-uniform-from-coin-flips