如何生成 Spellable hash 或 Pronounceable hash?
How do I produce Spellable hash or Pronounceable hash?
假设我想散列这个 Hello World!
我希望输出的是随机词(无意义),但它很容易(可能只对我而言)像这样说、发音或拼写:
acolamesaba
或者 olapitozida
本例输出长度为11个字符。
我们知道元音 = (a,i,u,e,o)
和辅音 =(元音除外)
所以输出模式是:元音+辅音+元音+辅音+元音+辅音+...+元音
也许修改 sha256 和 md5 等常见哈希算法可以提供帮助。
从我的角度定义什么是无法拼写的哈希只是一个例子:cdhrswyxcew
,所以它基本上不同于我的输出模式规则。
已解决!
修改后的 sha256
from hashlib import sha256
def spellableHash(inp):
vowel = ['a','i','u','e','o']
consonant = ['b','c','d','g','h','j','k','l','m','n','p','r','s','t','v','w','y']
lenCons = len(consonant)
lenVow = len(vowel)
hashed = sha256(inp.encode())
digested = hashed.digest()[:11]
result=""
for i,v in enumerate(digested):
if i%2 == 0:
result+=vowel[v%lenVow]
else:
result+=consonant[v%lenCons]
return result
print(spellableHash("Hello World!")) #usuyuguware
有一种算法专门用于此目的,称为 Bubble Babble Binary Data Encoding。您采用普通的加密哈希,例如 SHA-256,然后使用 Bubble Babble 算法对其进行编码。
它在元音和辅音之间交替,并包含少量冗余以检测错误。
假设我想散列这个 Hello World!
我希望输出的是随机词(无意义),但它很容易(可能只对我而言)像这样说、发音或拼写:
acolamesaba
或者 olapitozida
本例输出长度为11个字符。
我们知道元音 = (a,i,u,e,o) 和辅音 =(元音除外)
所以输出模式是:元音+辅音+元音+辅音+元音+辅音+...+元音
也许修改 sha256 和 md5 等常见哈希算法可以提供帮助。
从我的角度定义什么是无法拼写的哈希只是一个例子:cdhrswyxcew
,所以它基本上不同于我的输出模式规则。
已解决! 修改后的 sha256
from hashlib import sha256
def spellableHash(inp):
vowel = ['a','i','u','e','o']
consonant = ['b','c','d','g','h','j','k','l','m','n','p','r','s','t','v','w','y']
lenCons = len(consonant)
lenVow = len(vowel)
hashed = sha256(inp.encode())
digested = hashed.digest()[:11]
result=""
for i,v in enumerate(digested):
if i%2 == 0:
result+=vowel[v%lenVow]
else:
result+=consonant[v%lenCons]
return result
print(spellableHash("Hello World!")) #usuyuguware
有一种算法专门用于此目的,称为 Bubble Babble Binary Data Encoding。您采用普通的加密哈希,例如 SHA-256,然后使用 Bubble Babble 算法对其进行编码。
它在元音和辅音之间交替,并包含少量冗余以检测错误。