Symmetric

固定大小的對稱加密

  • December 4, 2017

我基本上需要的是一種對稱加密和解密 ID 的方法,它是一個字元串。兩個版本的 ID 都將在不同的域中生活和工作,我需要一種切換域的方法,而不需要在記憶體中保存映射表。我的要求是:

  • 這兩種 ID 都必須是人類可讀的(字母數字)。
  • 普通 ID 具有固定長度
  • 加密 ID 必須具有固定長度(不一定與普通 ID 相同)

abc123 ==== encrypt ====> as78ads89dfs ==== decrypt ====> abc123 23kop2 ==== encrypt ====> jfdsdfsg8dsf ==== decrypt ====> 23kop2 ...

有沒有辦法通過某種加密和編碼的組合來獲得這個?

謝謝你們

讓 $ E_k $ 表示任何保留長度的認證加密方案,例如 AES-GCM。這些通常會增加 12+16=28 字節的固定成本。

現在我假設您知道如何為上述密碼生成和管理密鑰,並且您知道如何為密碼生成隨機數。

讓 $ m $ 是您的明文將擁有的最大長度,以字節為單位。定義 $ m’=m+1 $ , 這是編碼後消息的長度和將被輸入的數據量 $ E_k $ .

編碼本身很簡單:取一個 $ n $ -byte 消息,附加一個0x01字節和 $ m-n $ 0x00字節。要從消息的末尾開始解碼,請遍歷所有0x00字節,直到找到0x01字節。你扔掉任何從(包括)0x01字節開始的東西。

所以整體流程會像

0xBEEF     ==> encode ==> 0xBEEF010000 ==> AE-encrypt ==> nonce ||ciphertext ||tag  ==> AE-decrypt ==> 0xBEEF010000 ==> decode ==> 0xBEEF
0xDEADBEEF ==> encode ==> 0xDEADBEEF01 ==> AE-encrypt ==> nonce'||ciphertext'||tag' ==> AE-decrypt ==> 0xDEADBEEF01 ==> decode ==> 0xDEADBEEF

引用自:https://crypto.stackexchange.com/questions/53591