Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否可以缓存java.security.PrivateKey对象,这样我就不必通过从私钥文件读取来创建私钥,从而获得更好的性能_Java_Security_Encryption_Cryptography - Fatal编程技术网

我是否可以缓存java.security.PrivateKey对象,这样我就不必通过从私钥文件读取来创建私钥,从而获得更好的性能

我是否可以缓存java.security.PrivateKey对象,这样我就不必通过从私钥文件读取来创建私钥,从而获得更好的性能,java,security,encryption,cryptography,Java,Security,Encryption,Cryptography,java.security.PrivateKey是线程安全的吗?我必须为每个请求验证数字信号,所以我在想,一旦我从物理位置加载私钥文件,在将其转换为java.security.PrivateKey后,是否可以缓存它,这样我就不必每次都创建私钥 private PrivateKey privateKey; private PrivateKey getPrivateKey(byte[] keyFileBytes) throws Exception { PKCS8EncodedKeyS

java.security.PrivateKey是线程安全的吗?我必须为每个请求验证数字信号,所以我在想,一旦我从物理位置加载私钥文件,在将其转换为java.security.PrivateKey后,是否可以缓存它,这样我就不必每次都创建私钥

private PrivateKey privateKey;
private PrivateKey getPrivateKey(byte[] keyFileBytes) throws Exception {
        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyFileBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        this.privateKey=kf.generatePrivate(spec);
    }

PrivateKey
是一个接口,所以您应该询问PrivateKey的具体实现是否是线程安全的,但它可能取决于您使用的安全提供程序。可能会有帮助。创建密钥真的那么慢吗?或者它真的是从一个缓慢的文件中读取
keyFileBytes
?您是否尝试缓存字节并查看是否仍然存在性能问题?字节肯定是线程安全的,对吗?正如其他人所评论的,这取决于实现。我看到的所有实现基本上都是不可变的,因此是线程安全的。但是,契约并不能保证这一点,因此实际上您应该假设不需要,并使用锁定来确保序列化访问。然而,为了提高性能,您可能会选择为每个线程创建一个副本,这消除了任何可能的争用。感谢Michalk、Andreas和James。我将Privatekey保留为实例变量,但将sign方法设置为同步以避免任何问题。