2016-04-25 53 views
1

例如: 我有key1 =「abc」和key2 =「xyz」。從兩個不同的值創建一個公用密鑰,無視順序

我想寫一個函數,它會返回相同的值,而不管參數的順序如何。

所以foo(key1,key2)和foo(key2,key1)應該都是相同的值ex。 「123」。

我想到了某種哈希,但不是很確定什麼是儘可能高效的最佳方法。

希望任何想法,我在javascript實現它/ Node.js的

+1

聽起來不像一個好主意TBH。你通過忽略順序來降低安全性。散列的一部分是,您可以非常精確地命令以產生單個結果。這意味着你希望兩個獨特的輸入(A,B&B,A)映射到一個結果上。你會知道輸入到散列的順序。如果你喜歡,你可以根據它們的值或其他值按字母順序排列它們,但是當你做散列時,你應該知道你用於排序的技術,以便它產生一對一的映射。這個要求的用例是什麼? – ManoDestra

+0

我知道,這是一個奇怪的需求,但這正是他們需要的A,B&B,映射到同一個對象。是的,排序工程,這麼簡單:) – zsayn

+0

是的,我明白你的意思了。只需按照規定的順序排序所需的字段,無論是上升還是下降。並添加你的鹽,私鑰,時間戳等,然後散列它。簡單:) – ManoDestra

回答

3

如果輸入是字符串,那麼你可以將字符串只是排序,將它們結合起來,然後散列組合的字符串。排序將讓你一個一致的哈希值,在通過按鍵不管順序。

function foo(key1, key2) { 
    var sortedKeys = Array.prototype.slice.call(arguments).sort(); 
    return makeHash(sortedKeys.join("-")); 
} 

按自己的需要提供makeHash()功能。這裏是散列函數some possibilities

注意:此實現可以使用任意數量的參數。如果只想使用前兩個參數,或者如果有多於兩個參數或者少於兩個參數時要引發異常,則可以輕鬆添加這些行爲中的任何一個。

+0

基本上我在上面的評論中試圖描述的,簡潔的。好工作:) – ManoDestra

+0

謝謝jfriend00,我不知道爲什麼我沒有想到只是對輸入進行排序,當然這是非常有意義的。 – zsayn

相關問題