我正在开发一个 Groovy 应用程序,它必须为用户提供一个包含加密查询参数的链接。目前我们使用 AES 加密算法,所有链接都使用相同的 IV。我们知道这很糟糕(因此我们想要切换的原因),但这样做的原因是限制查询参数的大小(包括一个 base64 编码的 16 字节初始化 vector 和每个查询参数使得链接很长)。我们想切换到非确定性算法,以便我们在查询数据中具有所需的随机性,但不必将 IV 存储在查询参数中。
因为我们使用的是 Groovy,所以我们可以使用 Java 中的任何东西。虽然我不确定要开始研究哪种算法,但我并没有做太多的加密工作。理想情况下,我们想要一个在 Java SE 中可用的或作为可免费使用的 Java 库的。此外,非常感谢任何包含有关如何实现这些算法的详细信息的链接。
最佳答案
目的是不要两次使用相同的初始化 vector 。如果服务器在解密时知道请求中有一些独特的东西,则可以将其用作初始化 vector 。
否则,您可以简单地使用计数器作为初始化 vector 。保留一个中央计数器,每次加密时都会增加该计数器,并将该计数器放在加密数据的前面。然后将这个计数器扩展为一个 16 字节的初始化 vector 。
关于Java/常规 : Non Deterministic Crypto Algorithm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24276341/