相关疑难解决方法(0)

使用Java 8u20进行慢速AES GCM加密和解密

我正在尝试使用AES/GCM/NoPadding加密和解密数据.我安装了JCE Unlimited Strength Policy Files并在下面运行了(简单的)基准测试.我使用OpenSSL做了同样的事情,并且能够在我的PC上实现超过1 GB/s的加密和解密.

使用下面的基准测试,我只能在同一台PC上使用Java 8进行3 MB/s的加密和解密.知道我做错了什么吗?

public static void main(String[] args) throws Exception {
    final byte[] data = new byte[64 * 1024];
    final byte[] encrypted = new byte[64 * 1024];
    final byte[] key = new byte[32];
    final byte[] iv = new byte[12];
    final Random random = new Random(1);
    random.nextBytes(data);
    random.nextBytes(key);
    random.nextBytes(iv);

    System.out.println("Benchmarking AES-256 GCM encryption for 10 seconds");
    long javaEncryptInputBytes = 0;
    long javaEncryptStartTime = System.currentTimeMillis();
    final Cipher javaAES256 = Cipher.getInstance("AES/GCM/NoPadding");
    byte[] tag …
Run Code Online (Sandbox Code Playgroud)

benchmarking cryptography java-8 aes-gcm

21
推荐指数
1
解决办法
1万
查看次数

Java Server,TLSv1.1 快,TLSv1.2 极慢(90MByte/sec vs 4MByte/sec)

测试之间的唯一变化是更改 TLS 版本。Chrome 和 FireFox 之间的行为是相同的。

TLSv1 和 TLSv1.1 都达到 90 兆字节/秒。他们在 Java 6 (TLSv1) 和 Java 8 (TLSv1/TLSv1.1) 上获得了这种速度。

然而,TLSv1.2 大大降低了速度。我们得到 4 兆字节/秒。没有更改密码,没有其他设置等。不仅我们的开发机器,而且客户也报告了同样的事情,Windows 操作系统、Java 8、TLSv1.2。我们使用的是 OS X、Java 8、TLSv1.2。所以这似乎是一个普遍的趋势。测试是在本地主机、至强 6 核处理器、SSD 驱动器上完成的。如果我们不使用 HTTPS,我们将获得超过 200MB/秒的速度。所以 4MB/sec 只是对我们可以做的事情的可怕侮辱。

这不是初始连接、缓存或重新协商等。这只是原始传输速度。我没有发现任何已知的 Java 错误,有没有人有任何猜测?

这是 Chrome 报告的连接和密码:

TLSv1.2

您与 127.0.0.1 的连接使用现代加密技术进行加密。

该连接使用 TLS 1.2。

连接使用 AES_128_GCM 进行加密和验证,并使用 ECDHE_RSA 作为密钥交换机制。

TLSv1.1

您与 127.0.0.1 的连接使用过时的加密技术进行加密。

该连接使用 TLS 1.1。

连接使用 AES_128_CBC 加密,SHA1 用于消息认证,ECDHE_RSA 作为密钥交换机制。

想法?

java performance ssl https

5
推荐指数
1
解决办法
5513
查看次数

标签 统计

aes-gcm ×1

benchmarking ×1

cryptography ×1

https ×1

java ×1

java-8 ×1

performance ×1

ssl ×1