我需要生成一个带有两个输入(字符串)ex的散列键: inputA!= inputB为true
key1 = hash_method (inputA,inputB);
key2 = hash_method (inputB,inputA);
和条件
key1 === key2为真。
我将需要js但是如果有人可以帮助我使用java或ruby我可以引用它。 或者你有一些js的插件或库会很棒。我不需要密钥会非常安全,但我需要这只是
谢谢
答案 0 :(得分:4)
我只是对字符串的哈希进行异或。这是在对象的字段上创建哈希的常用方法。异或是可交换的,所以你的条件应该是真的。
function hash_method(inputAHash, inputBHash) { return inputAHash ^ inputBHash };
链接:
This answer提供了如何计算字符串上的良好哈希码(以计算来自inputA和inputB的哈希值)的信息。
How to create hash codes基于对象的字段(这是一个Java教程,但同样适用于JS)。
答案 1 :(得分:3)
假设Java中用于字符串的哈希码生成足够好,在Javascript中实现它是非常简单的。如果你想要一个构建在多个字符串上的哈希码,其中字符串的顺序是无关紧要的,你可以将每个字符串的哈希码与xor结合起来。
可以使用一个或多个参数调用以下Javascript函数:
function hash() {
var h=0, i=0;
if(hash.arguments.length == 1) {
for(i=0; i<hash.arguments[0].length; i++) {
h = (h * 31 + hash.arguments[0].charCodeAt(i)) & 0xffffffff;
}
}
else {
for(i in hash.arguments) {
h ^= hash(hash.arguments[i]);
}
}
return h;
}
请注意,此函数的结果范围是无符号的([0,2 ^ 32>],而未签名([-2 ^ 31,2 ^ 31>])为Java的String#hashCode()
。
答案 2 :(得分:0)
我的最终解决方案:
var hash = function (params) {
var h=0, i=0;
if(typeof (params) === "string") {
for(i=0; i<params.length; i++) {
h = (h * 31 + params.charCodeAt(i)) & 0xffffffff;
}
}
else if( params instanceof Array) {
for(i in params) {
h ^= hash(params[i]);
}
}
return h;
};
var a1 = "pc-1"; var a2 = "router-2";
var params1 = [a1, a2];
hash(params1); //result 6720633
var params2 = [a2,a1];
hash(params2); //result 6720633