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

时间:2014-12-17 05:15:02

标签: algorithm encryption

我写了哈希计算函数:

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

2 个答案:

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