2017-02-13 26 views
0

我有一个简单的问题,由于缺乏知识我无法解决,而且我在网上找不到任何线索。从数字列表中生成一个值

我想:

  • 生成从数(INT的阵列)的列表的 “值1”。
  • 从随机数生成“值2”。
  • 然后通过比较“值2”和“值1”来检查号码列表中是否存在随机数。

为什么我想生成这些值,而不是简单地做一个数组列表中随机数的数组搜索?

因为有必要隐藏号码列表,并且能够通过比较值进行快速检查。

我曾想过“散列”方法,但没有办法散列int数组。

我也想过RSA密码系统,从数字列表生成一个“私钥”,然后从随机数生成“公钥”。但我找不到实现它的方法。

我想知道是否有办法做我想做的事情?

谢谢你的帮助。


实施例:

在PHP服务器具有号码的列表。 (例如:[10,20,24,6,98])

JS中的客户端向服务器发送一个号码。 (实施例:8)

然后

// [10, 20, 24, 6, 98] to hashed or key 
$computedIntArray = HashedOrRsaEncrypted($ServerIntArray); 

// 8 to hashed or key 
$computedClientNumber = HashedOrRsaEncrypted($ClientNumber); 

// return true if the clienthashedvalue is present in the serverIntArray 
$trueOrFalse = IsPresentInArray($computedClientNumber, $computedIntArray); 

回答

0

用于产生,例如10个非重复的随机数,则可以使用一个散列表。

var hash = {}, 
 
    l = 10, 
 
    r; 
 

 
while (l) { 
 
    r = Math.floor(Math.random() * 100); 
 
    if (!hash[r]) { 
 
     hash[r] = true; 
 
     l--; 
 
    } 
 
} 
 

 
console.log(Object.keys(hash).map(Number));
.as-console-wrapper { max-height: 100% !important; top: 0; }

随着ES6,你可以使用一个Set,并添加值,直到集合的大小有想要的计数。

var hash = new Set, 
 
    l = 10; 
 

 
while (hash.size < l) { 
 
    hash.add(Math.floor(Math.random() * 100)); 
 
} 
 

 
console.log([...hash]);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

我想你是误会我的问题。它不是关于生成随机数,而是关于从一个数字列表中生成一个散列或一个私钥或一个值,并对一个随机数(例如5)进行相同操作。然后能够比较散列或密钥(私有/公共)或值,以便知道随机数是否存在于数字列表中。 – NoSkiiilL

+0

对,为了测试一个数字是否已经在使用,你可以使用一个对象作为散列表或一个集合。但问题在哪里? –

+0

我编辑了我的文章并添加了一个示例。我开始想,也许我想做的事情是不可能的。对不起,我找不到表达自己的另一种方式,英语不是我的母语。谢谢你的帮助。 – NoSkiiilL

相关问题