這是一個問題,我試圖創建最佳的解決方案。我在[0 ... N]範圍內有一組有限的非負整數。我需要能夠將此組中的每個數字表示爲一個字符串,並且能夠將此字符串反向轉換爲原始數字。所以這應該是一個雙重功能。雙目「整數<->字符串」函數
附加要求是:
- 若干String表示應該混淆原始數至少到一定程度。所以原始解決方案如f(x)= x.toString()將不起作用。
- 字符串長度很重要:越少越好。
- 如果有人知道K的字符串表示,我希望它是非平凡的(某種程度上)猜測K + 1的字符串表示形式。
對於第1頁第2頁&明顯的解決方案是使用類似Base64編碼(或任何BaseXXX適合所有的值)的符號。但是我們能否以最小的額外努力適應第3頁?常識告訴我,我還需要一個雙射「String < - > String」函數用於BaseXXX值。有什麼建議麼? 或者有比BaseXXX更適合所有3種需求的東西?
右邊的「相關」列表有許多類似的qs,它似乎是 – AakashM 2012-01-12 10:26:17
根據定義,可逆混淆函數是一個「密碼」。不能從enc(k)計算'enc(k + 1)'對於一個好的密碼來說是非常需要的,因爲如果可以的話,一個已知的明文/密碼對將會給你儘可能多的附近明文的密文你有時間計算。那麼我認爲這個問題是,爲了獲得短密文,你是否願意接受一個密碼是「壞」(或者計算代價高昂),無論你是否要使用鹽,以及是否需要一個密碼流模式。 – 2012-01-12 11:45:16
流式傳輸模式非常重要,並不是完全無關緊要的,因爲即使您的密碼使其無法逆轉單個數字的表示形式,攻擊者也可以看到很長的一系列數字並知道一些可能的明文數據分佈可能能夠執行頻率分析,馬爾可夫鏈分析等,以識別特定普通明文值的加密值。有關流模式失敗的示例,請參閱http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29。 – 2012-01-12 11:54:23