2014-11-14 72 views
-4

我需要加密IP地址。例如,这是我的IP地址:78.172.16.193我需要将此地址转换为6个字符的字。它可能包含整数或字符串。另外它应该是可解密的。加密IP地址

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

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

+0

听起来像一个功课问题。告诉我们你尝试过的东西。此外,这是一个非常广泛的问题,所以如果你有一个问题,你可能得不到你想要的答案。 – mirvine 2014-11-14 19:03:43

+0

欢迎来到SO!从最近我们得到的所有问题来看,您可能会看到只需将您的要求置于问题中并获得答案,但实际上您需要展示努力。告诉我们你卡在哪里?为什么你的解决方案不起作用。结果是什么。预期的结果是什么。 – PeeHaa 2014-11-14 19:03:55

+0

你真的需要给我们更多的去这里。你对加密有什么了解?你知道如何编程吗?你会使用哪种语言?您可以简单地将四个八位字节转换为字符。这是一种加密形式。在您喜爱的搜索引擎上搜索加密算法。那将是一个开始的好地方。 – 2014-11-14 19:04:53

回答

0

使用Base64。它被广泛使用,可能已经在您的目标框架上得到支持。正如基础10只允许一个字符中的10个可能的字形一样,基础64允许每个字符64个字形。为了表示一个32位数的IP地址,你需要一个基数为64的数字,至少有6个数值。

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位对称密钥对原始值进行异或运算。这是粗糙的,但是如果在传输的数据中没有任何模式(如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只是简单地翻转这些位。

0

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

有256^4个ip地址来表示。

这应该是相当平凡的拿出一些映射。

你不能轻易指定小数,因为你不能浪费3个字符,并且仍然能够将4个节点挤压成3个字符。因此,您一定需要将IP结合到您似乎已经完成的单个区块中,而无需显示任何工作。