我需要加密ip地址。示例这是我的ip地址:78.172.16.193我需要将此地址转换为6个字符的单词。它可能包含整数或字符串。它也应该是我可以解密的。
我该怎么做?我在等你的建议。
我将在NodeJS中使用它。我不想要代码,我想要一个算法。
答案 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只是翻转了这些位。