从字符串生成好的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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在ArrayList中比较数字   java在Kotlin中使异步调用同步   让“Scala编程”junit示例在IntelliJ中工作的java问题   java Servlet侦听器未在ContextListener中设置属性   将Microsoft SQL Server数据库连接到我的Java项目   加载资源时出现java“需要注册工厂”异常   java如何使用POI检查excel中的重复记录?   java如何更改机器生成的代码   java如何确保重写的方法是同步的   用Spring编写Hibernate时的java XML奥秘   java管理mysql数据库中存储的用户权限   java如何运行。来自Javascript的jar方法   java我想在Web应用程序中进行身份验证&对桌面应用程序使用相同的凭据。我该怎么做?