创建和维护多个密码

BZa*_*per 3 java encryption multithreading

我遇到了多个线程正在争夺RSA的问题javax.crypto.Cipher,我正在考虑保留一个密码集合 - 每个线程一个.但是Cipher.getInstance()给了我同样的例子.我应该调查clone()还是有更好的方法,比如new Cipher()?我们考虑过synchronized{}只使用单个实例,Cipher但速度太慢了.感谢您提前获得所有帮助!

Gra*_*ray 6

在我看来,不同的线程得到不同的Cipher实例 - 至少在Mac OSX下的JDK 1.6.0_33下.也许这是因为我正在使用BouncyCastle提供商?

您是尝试getInstance()从同一个线程调用两次还是从不同的线程调用? clone()似乎没有Ciphers可用,所以这不是一个选项.

以下代码似乎至少为我吐出了不同的身份哈希码对象:

private static final ThreadLocal<Cipher> localDigest = new ThreadLocal<Cipher>() {
    @Override
    protected Cipher initialValue() {
        try {
            return Cipher.getInstance("RSA");
        } catch (Exception e) {
            // ugly but necessary
            throw new RuntimeException(e);
        }
    }
};

public static void main(String[] args) {
    new Thread(new MyRunnable()).start();
    new Thread(new MyRunnable()).start();
}

private static class MyRunnable implements Runnable {
    @Override
    public void run() {
        Cipher cipher = localDigest.get();
        System.out.println("Got digest " + System.identityHashCode(cipher));
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)