代码之家  ›  专栏  ›  技术社区  ›  Sudhakar

缓存KeyStore的内容并将其转换为InputStream

  •  2
  • Sudhakar  · 技术社区  · 15 年前

    我使用AES来完成对称密钥加密。 我将密钥存储在受密码保护的密钥库中。

    api公开了从keystore加载密钥的以下内容

    keyStore.load(inputStream, keyStorePassword.toCharArray()); 
    

    所以每次我想要加密或解密时,我都必须传递inputstream,我认为这至少是一个性能上的冲击

    你能帮我把它存储在内存中,然后再访问它并转换成输入流吗?

    注:

    2 回复  |  直到 15 年前
        1
  •  3
  •   musiKk    15 年前

    密钥库采用某种二进制格式。把它转换成UTF-8字符串是不好的。你需要一个 ByteArrayInputStream

    但是 : 在我看来 在性能优化方面并不重要。您应该做一些分析来检查这是否真的会影响性能。因为它不应该这样做。操作系统也会缓存,如果同一个文件在此期间没有改变,很可能不会从磁盘上一遍又一遍地读取同一个文件。程序员通常非常不善于判断程序的哪些部分是性能猪,哪些不是。

    另外:密码通常是通过 char 数组:您可以完全控制数组的内容,并且可以在不再需要时清除它。密码应尽可能短地留在内存中。对于简单的字符串,您没有这种控件(您不知道它们何时被垃圾收集)。

        2
  •  0
  •   Sudhakar    15 年前

    谢谢你的回复。

    我将加载密钥库一次,提取SecretKey并将其分配给您正在使用的类的实例或类变量,然后在需要加密或解密时使用SecretKey