Encryption

是否有保留長度且僅輸出字母數字的加密格式?

  • September 12, 2015

我正在嘗試為我正在設計的伺服器應用程序設計促銷程式碼系統。基本上,我為某個項目生成一個促銷程式碼並將程式碼提供給某人,然後他們將其輸入伺服器。

目前,我編寫的生成器給出了一個 20 個字元的字母數字程式碼,但是程式碼太容易操作了。為了解決這個問題,我想實現某種對稱加密(以便生成器應用程序可以生成程式碼,但伺服器也可以讀取它)以防止使用者弄清楚程式碼是如何生成的。

是否有我可以使用的對稱加密算法將返回 20 個字母數字字元?

如果可能的話,我想找到一種可以輕鬆實現到 Java 程式碼中的算法。

其他兩個答案都解決了特定格式的加密問題,但我認為它們都不一定適合您的案例。您希望能夠生成伺服器能夠驗證的 20 個字元程式碼。如果您不需要程式碼包含任何秘密資訊,則對稱 MAC 足以滿足此案例。

例如,使用格式ID||HMAC(key, ID),ID 是每個程式碼的任意唯一編號。您可以選擇 ID 大小,然後截斷 HMAC 以匹配您的長度要求。例如 HMAC-SHA256 的 32 位 ID 和 168 個左位。然後以您想要的格式編碼。

ID 可以隨機生成或使用計數器生成,也可以包含編碼資訊。伺服器將儲存 ID 號和促銷程式碼的用途等之間的關聯。攻擊者無法在不知道 MAC 密鑰的情況下修改促銷程式碼,除非有一定機率 $ 2^{-l} $ , 在哪裡 $ l $ 是以位為單位的 MAC 長度。你可以低至 $ l = 64 $ 安全地。(如果您使線上猜測攻擊足夠困難/緩慢,可能會更低。)

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