我需要加密IP地址。例如,這是我的IP地址:78.172.16.193我需要將此地址轉換爲6個字符的字。它可能包含整數或字符串。另外它應該是可解密的。加密IP地址
我該怎麼做?我在等你的建議。
我將在NodeJS中使用它。我不想要代碼,我想要一個算法。
我需要加密IP地址。例如,這是我的IP地址:78.172.16.193我需要將此地址轉換爲6個字符的字。它可能包含整數或字符串。另外它應該是可解密的。加密IP地址
我該怎麼做?我在等你的建議。
我將在NodeJS中使用它。我不想要代碼,我想要一個算法。
使用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只是簡單地翻轉這些位。
整數或字符串表示您有26 + 26 + 10個字符可供選擇。 62種選擇。這映射到6^62個可用字符串。
有256^4個ip地址來表示。
這應該是相當平凡的拿出一些映射。
你不能輕易指定小數,因爲你不能浪費3個字符,並且仍然能夠將4個節點擠壓成3個字符。因此,您一定需要將IP結合到您似乎已經完成的單個區塊中,而無需顯示任何工作。
聽起來像一個功課問題。告訴我們你嘗試過的東西。此外,這是一個非常廣泛的問題,所以如果你有一個問題,你可能得不到你想要的答案。 – mirvine 2014-11-14 19:03:43
歡迎來到SO!從最近我們得到的所有問題來看,您可能會看到只需將您的要求置於問題中並獲得答案,但實際上您需要展示努力。告訴我們你卡在哪裏?爲什麼你的解決方案不起作用。結果是什麼。預期的結果是什麼。 – PeeHaa 2014-11-14 19:03:55
你真的需要給我們更多的去這裏。你對加密有什麼瞭解?你知道如何編程嗎?你會使用哪種語言?您可以簡單地將四個八位字節轉換爲字符。這是一種加密形式。在您喜愛的搜索引擎上搜索加密算法。那將是一個開始的好地方。 – 2014-11-14 19:04:53