2013-01-31 76 views
0

我有一個8位數字段,我想將其加密(我不擔心解密它)爲16個字符(或更多)字段。我需要這個,所以我可以使用加密的字段發送給報告機構。將8位字段加密爲16位(或更多)字符的加密例程

+3

報告機構將如何處理它?另外,你在什麼環境下工作(C++,Python,PHP等?) – msanford

+1

你想要通過「加密」字段來達到什麼目的? 8位數字到16位字符的映射必須是一對一的映射嗎?還有其他要求嗎?瞭解這些事情對我們來說至關重要,以便正確回答您的問題。 –

+0

正如其他人也指出的那樣,這個問題還不夠具體。例如,沒有辦法知道如果將字段作爲具有Cast-128的單個塊進行加密就能滿足要求。 – Jack

回答

1

既然你不需要解密,你可以散列它(不可逆),而不是使用加密。在PHP中,您可以使用hashfnv164散列算法執行此操作,該算法返回16個字符的散列。

此外,還有其他幾個哈希算法會產生超過16個字符。您可以使用hash_algos來查看系統上可用的內容。 Here's一個腳本來做到這一點。

+1

如果我們確實在談論冷凍造影術,那麼提議的散列是不安全的(足夠) –

+0

他沒有提到任何安全性。只有該字段需要加密。 – Isius

+1

加密聽起來像我的安全。我們還不完全確定,因此評論。 –

1

,無需瞭解這背後的「加密」的宗旨太多這裏是我建議的內容(根據你的目標是什麼有些保守和安全保護的假設):

  1. 選擇一個隨機數。叫它R。數字最好至少爲32位。
  2. 對於您擁有的每個8位數標識符,請組成字符串「<digits of R><8 digit identifier>」。
  3. 使用一些密碼安全的散列算法來獲取步驟2中形成的字符串的散列。
  4. 將步驟3中的散列格式化爲十六進制字符串。
  5. 使用步驟4中的十六進制字符串作爲報告給「報告機構」的標識符。

這個方案的好處是,只要你記得值R你可以總是映射每個8位數的標識符到相同的十六進制字符標識符。這在您的應用程序中可能很重要,也可能不重要。

當然,這個方案假設你永遠不需要執行一個revese映射,並且該機構不想解密標識符。換句話說,它假設你的目標只是不給機構標識符I而是一個等同標識符I'。

+0

看起來像嘗試重新發明HMAC給我。這背後的動機是什麼? – Jack

+0

AN HMAC是非常不同的,我沒有聲稱以上是爲了實現HMAC的功能。我在我的解決方案中假定的要求 - 基於OP提供的最小和令人困惑的信息 - 他的意圖是從'ID'到'ID'進行一對一的映射。 –

+0

是的。我同意HMAC是另一回事。 HMAC是正確的keyd哈希。在嘗試相同的情況下進行施工並不能實現這一目標。最大的問題是小鍵盤(32位) – Jack