2010-10-27 67 views
10

我需要一些指針或實例來說明如何將int加密到另一個int,並且需要一個密鑰來解密該值。對稱整數到整數加密

喜歡的東西:

encrypt(1, "secret key") == 67123571122 
decrypt(67123571122, "secret key") == 1 

這傢伙問幾乎同樣的問題:Symmetric Bijective Algorithm for Integers
但是我是一個總的加密「的n00b」如果可能的話,我想一些實際的例子,在蟒蛇。

我明白我需要使用某種類型的分組密碼,但我敢失去了部分關於保持加密的結果仍然是數字的,有點短(可能是長期的,而不是一個int)

任何指針?謝謝

更新- 爲什麼我要這樣做?
我有一個Web服務,其中每個「對象」獲得一個網址,例如: example.com/thing/123456/

眼下,這些ID是連續的。我想隱藏它們是連續的(數據庫ID)的事實。

的東西在這些網頁是不是「最高機密」或類似的東西,但它不應該那麼容易有人在其他一些隨機」對象窺探剛剛遞增該ID在URL中。

因此,通過某種雙向數字加密,URL ID將不會是連續的,而且需要相當多的時間才能找到更多這些對象。 (此外,請求被扼殺)

而我想保留這個數字而不是一個任意字符串的唯一原因是,這樣的變化是一個總的嵌入式替換,並且事情只會在沒有任何其他代碼更改的情況下工作。

此外,我不能只生成新的隨機數據庫ID。我必須在應用程序中處理這種加密/解密。

+2

你爲什麼這樣做?目標是什麼?創建自己的密碼非常危險。即使看似簡單的事情,比如「只使用密碼X」,也會產生意想不到的安全後果。 – 2010-10-27 00:13:34

+0

好點。我更新的問題 – adamJLev 2010-10-27 00:32:55

+0

[格式保留加密(http://en.wikipedia.org/wiki/Format-preserving_encryption) – 2010-10-27 01:05:21

回答

3

這取決於你想要的密碼安全性。對於不太安全的(在加密意義上說 - 如果你不真的期望嚴重的攻擊,那麼對於日常使用來說可能是很好的),那麼使用固定祕密密鑰的XOR將起作用。請注意,它會受到一些相當基本的密碼分析的影響。

如果你想要真正的加密,你可能必須使用像RC4一樣的流密碼。您可以獲取32位密鑰流並將其與您的值異或以對其進行加密。只要你爲每個值得到一個新的32位密鑰流,你就會好起來的。

然而,RC4有一些注意事項,所以請先閱讀它。

塊密碼不會是你在這種情況下的朋友,因爲他們都有一個64位或更多塊大小。這意味着你需要墊您的32位整數位到64位,你會得到64位退了出來......但你不能選擇其中32個保持。你將無法用只有一半的位來解密它。如果你很樂意移動多頭,那麼你可以使用3DES或Blowfish。

這一切都取決於正是您要加密,爲什麼,所以很難給出一個明確的答案。我希望這至少能讓我們知道從哪裏開始。

+1

用於64位分組密碼。我在這裏有一個代碼示例:http://stackoverflow.com/questions/3569783/query-string-parameter-obfuscation/3571165#3571165也是一個64位整數表示爲十六進制只有16個字符長,應該是罰款用於URL中。 – 2010-10-27 02:45:14

0

你想加密一個'int'即q 32/64位數?
然後最簡單的方法就是將它與32/64位密鑰異或。

+0

或者,用較小的鍵,重複了數跨度XOR它。 – 2010-10-27 00:08:08

+0

這個代碼看起來怎麼樣,或多或少? – adamJLev 2010-10-27 00:08:49

+0

小心直xor因爲然後只有64個例子有一個機會,用戶可以找出關鍵。 – 2010-10-27 00:10:12

1

你可以看看本文:Perfect Block Ciphers with Small Blocks和演示文稿的the slides在FSE 2007年會議。

本文說明如何隨機地選擇n個元素的置換(例如,0和n-1之間的整數),它可以被看作是這組n個元素的密碼。

1

我張貼到這個問題的答案適用於你還有:使用短分組密碼。假設您的標識符爲64位,實際上,您可以簡單地使用XTEA密碼,並以64位整數作爲數據塊。

+0

聽起來不錯,XTEA的代碼看起來很簡單,可以很容易地移植到python。 Thx我會給這個鏡頭 – adamJLev 2010-10-27 14:28:37

0

簡單XOR不能稱爲加密。混淆是一個更合適的詞。 我開發了一種緊湊,快速且有希望的安全算法,我稱之爲Ayden。它在公共領域和can be downloaded from Github。希望它是有用的。