加密IP地址

时间:2014-11-14 19:01:12

标签: algorithm

我需要加密ip地址。示例这是我的ip地址:78.172.16.193我需要将此地址转换为6个字符的单词。它可能包含整数或字符串。它也应该是我可以解密的。

我该怎么做?我在等你的建议。

我将在NodeJS中使用它。我不想要代码,我想要一个算法。

2 个答案:

答案 0 :(得分:0)

整数或字符串表示您有26 + 26 + 10个字符可供选择。 62个选择。这映射到6 ^ 62个可用字符串。

有256 ^ 4个IP地址代表。

提出一些映射应该是相当简单的。

您无法轻松指定小数,因为您无法为它们浪费3个字符,并且仍然可以将4个节点压缩为3个字符。所以,你肯定需要将IP组合成一个单独的块,你似乎已经完成了,而没有显示出工作。

答案 1 :(得分:0)

使用Base64。它被广泛使用,并且可能已经在您的目标框架上得到支持。正如基数10在字符内仅允许10个可能的字形一样,基数64允许每个字符64个字形。要表示32位数字这样的IP地址,您需要具有至少6个值的base 64号码。

256 x 256 x 256 x 256        => ~4 billion
64 x 64 x 64 x 64 x 64       => ~1 billion  : 5 is not enough so lets use 6
64 x 64 x 64 x 64 x 64 x 64  => ~69 billion : it fits and there is still some headroom

此解决方案符合您的6个字符要求。如果您放弃了该要求,则可以使用32位对称密钥简单地对原始值进行xor。如果您正在传输的数据中没有任何模式(如果IP始终以192.168开头),这很粗糙,但足以混淆IP地址。它也容易受到所有零或所有攻击。

IP address    => 1100 0000 1010 1000 0000 0000 0000 0001 <= 192.168.0.1
symmetric key => 1011 1101 0101 1010 1011 1101 0101 1010 <= 189.90.189.90
xor result    => 0111 1101 1111 0010 1011 1101 0101 1011 <= 125.242.189.91

如果您只是使用相同的密钥再次对地址进行xor,则最终会再次使用原始地址。正如您所看到的,第三个元素泄漏了密钥,因为xor只是翻转了这些位。