我写了哈希计算函数:
var hash = function (string) {
var h = 7;
var i = 0;
var letters = "acdegilmnoprstuw";
while (i < string.length) {
h = (h * 37 + letters.indexOf( string[i++] ));
}
return h;
};
其中string = "agdpeew"
和结果为664804774844
。但现在我不知道如何破译哈希。因此,如果我的输入为664804774844
,则答案为agdpeew
。
我可以使用什么算法?
也许我可以从分部664804774844 / 37
开始,但我如何获得字母索引?
答案 0 :(得分:3)
对于短字符串,您可以从基数37开始表示数字 - 但为什么要尝试这样做?散列函数的大多数用例都不需要你反转函数,并且许多散列函数被设计为难以或不可能反转函数,除非在输入之后评估输入,直到找到产生的函数。你正在寻找的哈希值。
答案 1 :(得分:1)
下面是用Swift语言编写的代码,它既有加密也有加密。解密哈希值
var letters = "acdegilmnoprstuw";
哈希/加密
func hash(s:String) -> Int{
var h = 7 as Int;
for (var i = 0; i < s.characters.count; i++) {
// Getting the character at index
let s2: Character = s[s.startIndex.advancedBy(i)];
// Getting index of string 'acdegilmnoprstuw'
let l : Int = letters.startIndex.distanceTo(letters.characters.indexOf(s2)!);
h = (h * 37 + l);
}
return h;
}
Unhashing / Decrypt
func unhash(hashValue:Int) -> String{
var h = hashValue
var unhashedString : String = ""
while(h > 37){
unhashedString.append(letters[letters.startIndex.advancedBy(h % 37)])
h = h / 37
}
return String(unhashedString.characters.reverse())
}