密钥和密钥管理

虽然 JCE 可以保护加密操作和密钥生成,但开发人员可以实际管理密钥。这里需要提供更多信息。

在运行时处理密钥的一种普遍接受的最佳实践是将它们仅存储为 byte 数组,而不是作为字符串存储。这是因为 Java 字符串是不可变的,不能在内存中手动清除清零; 虽然可以删除对字符串的引用,但确切的字符串将保留在内存中,直到其内存段被垃圾收集并重用。攻击者会有一个大窗口,他们可以在其中转储程序的内存并轻松找到密钥。相反,byte 数组是可变的,可以将其内容覆盖到位; 一旦你不再需要键,你就可以将键清零