例如: 我有key1 =「abc」和key2 =「xyz」。從兩個不同的值創建一個公用密鑰,無視順序
我想寫一個函數,它會返回相同的值,而不管參數的順序如何。
所以foo(key1,key2)和foo(key2,key1)應該都是相同的值ex。 「123」。
我想到了某種哈希,但不是很確定什麼是儘可能高效的最佳方法。
希望任何想法,我在javascript實現它/ Node.js的
例如: 我有key1 =「abc」和key2 =「xyz」。從兩個不同的值創建一個公用密鑰,無視順序
我想寫一個函數,它會返回相同的值,而不管參數的順序如何。
所以foo(key1,key2)和foo(key2,key1)應該都是相同的值ex。 「123」。
我想到了某種哈希,但不是很確定什麼是儘可能高效的最佳方法。
希望任何想法,我在javascript實現它/ Node.js的
如果輸入是字符串,那麼你可以將字符串只是排序,將它們結合起來,然後散列組合的字符串。排序將讓你一個一致的哈希值,在通過按鍵不管順序。
function foo(key1, key2) {
var sortedKeys = Array.prototype.slice.call(arguments).sort();
return makeHash(sortedKeys.join("-"));
}
按自己的需要提供makeHash()
功能。這裏是散列函數some possibilities。
注意:此實現可以使用任意數量的參數。如果只想使用前兩個參數,或者如果有多於兩個參數或者少於兩個參數時要引發異常,則可以輕鬆添加這些行爲中的任何一個。
基本上我在上面的評論中試圖描述的,簡潔的。好工作:) – ManoDestra
謝謝jfriend00,我不知道爲什麼我沒有想到只是對輸入進行排序,當然這是非常有意義的。 – zsayn
聽起來不像一個好主意TBH。你通過忽略順序來降低安全性。散列的一部分是,您可以非常精確地命令以產生單個結果。這意味着你希望兩個獨特的輸入(A,B&B,A)映射到一個結果上。你會知道輸入到散列的順序。如果你喜歡,你可以根據它們的值或其他值按字母順序排列它們,但是當你做散列時,你應該知道你用於排序的技術,以便它產生一對一的映射。這個要求的用例是什麼? – ManoDestra
我知道,這是一個奇怪的需求,但這正是他們需要的A,B&B,映射到同一個對象。是的,排序工程,這麼簡單:) – zsayn
是的,我明白你的意思了。只需按照規定的順序排序所需的字段,無論是上升還是下降。並添加你的鹽,私鑰,時間戳等,然後散列它。簡單:) – ManoDestra