哈希解密,我可以使用什么算法



我写了哈希计算函数:

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开始,但是我如何获得字母索引?

对于短字符串,您可以从以 37 为基数表示数字开始 - 但为什么要这样做?哈希函数的大多数用例不需要你反转函数,许多哈希函数的设计目的是很难或不可能反转函数,除非在输入后评估输入,直到找到一个产生你正在寻找的哈希值。

下面是用 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;
}

取消哈希/解密

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())
}

相关内容

最新更新