散列MAC地址Java / Android

时间:2017-07-10 20:21:46

标签: java android security encryption hash

我想扫描附近的wifi路由器并以安全的方式存储他们的mac地址,这样原始的mac地址就无法重建(或者这样做是不可行的)。 mac地址表示为字符串,格式为xx:xx:xx:xx:x:xx其中x是数字或字母。

每当我找到相同的mac地址时,它应该映射到相同的输出字符串,但任何两个不同的mac地址应该产生不同的输出。我已经读过MD5算法用于哈希密码。使用MD5是一个好主意,还是应该考虑其他算法?如果发生碰撞,我不会是一个大问题。

在我收集了所有的mac地址后(没有添加新的地址)我想用每个散列值替换一个整数1 ... n,其中n是不同mac地址的总数。

我想在Android中实现这一点。

3 个答案:

答案 0 :(得分:0)

散列不是解决此问题的完美解决方案。如果有足够的计算能力,那么可以尝试散列所有可能的MAC地址。今天这样做是可行的。这一切都取决于这些MAC地址的重要性。也许你应该使用哈希算法10 ^ 5次,以使哈希计算更慢(这是密码的常用技巧)

更好的解决方案是使用良好的加密(AES等)加密地址

如果您仍想使用散列,请使用当前的散列而不是MD5,例如SHA-3。

答案 1 :(得分:0)

MD5是一种常见的散列算法,其不同MAC地址产生相同散列值的概率非常低,即。哈希冲突。 MAC地址通常是唯一的,因为它们内置在硬件网络设备的标识符中。这种独特的特性还可以保持避免哈希冲突。在多个设备具有相同MAC地址的情况下,即。 MAC欺骗您可能需要考虑在生成哈希之前将哈希与随机盐连接起来。 MD5将用于生成唯一哈希,但如果您的应用程序需要对字典攻击采取对策,使用Hashcat和John the Ripper等工具从哈希中查找明文MAC地址 - 请考虑使用更安全的哈希算法,如SHA-256 。它的哈希冲突率也较低。

答案 2 :(得分:0)

密码

对于密码,仅使用 MD5 SHA-256 等单向散列是不够的,因为它很容易受到攻击rainbow tables。此外,蛮力尝试所有有效密码的组合通常足够快,从而导致问题。

使用密码计算彩虹表的常用方法是在计算中添加随机盐,以防止预先计算的表格。对于反暴力,使用的方法是使用单向散列执行多次迭代以使进程更慢。这方面存在经过良好测试的方法,如PBKDF2Bcrypt等。

Mac地址到唯一ID

根据您的情况,您需要:

  1. 相同的MAC始终映射到相同的ID
  2. ID应以安全的方式构造,以便无法重建原始MAC地址
  3. 这里1)基本上是密码算法试图通过添加盐来防止的属性。

    2)我们应该防止蛮力工作。

    标准MAC Address可容纳48位信息。然后,这些位有时被细分为供应商分配的范围。对于MAC,特定供应商可能只有24位。如此小的空间,即使使用上面提到的密码的慢速算法,也很有可能强制该供应商的所有组合。

    基本上,你需要在这个过程中保密,以防止蛮力。这可以是例如通过加密引入 - 一种可能的方法可能是:

     MAC_ID = BASE_64_ENCODE(AES_ENCRYPT(MD5(MAC), SECRET_KEY))