2014-11-14 71 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結合到您似乎已經完成的單個區塊中,而無需顯示任何工作。