有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    在常规Java中,如果不使用本机,就无法做到这一点。JVM总是可以复制数据,并且RSAPrivateKey接口指定getPrivateExponent()返回不可变的BitInteger实例。这是由CipherSignature类使用的。使用安全令牌(例如使用Sun PKCS#11提供程序)是最好的方法

    无论你做什么,如果你认为内存不能保持安全,那么使用解密或登录软件都会有严重的问题。您至少需要操作系统级别的支持,这在Oracle Java实现中是无法实现的

  2. # 2 楼答案

    您必须确保没有任何敏感数据被放入不可变的数据类型(例如,您不能使用字符串),因为当您处理完敏感数据时,您需要能够覆盖它

    您可能会将私钥的内容保存在字节数组中(因为这正是getEncoded()返回的内容)。当您使用完私钥后,用零(或其他什么)填充字节数组

    您可能需要实现自己版本的PrivateKey,因此可以添加此新功能(因为您无法保证提供的实现将别名返回到实际阵列而不是副本)

    您还需要担心getEncoded()的任何调用者,因为调用者可以保留数据的副本