Ubuntu Linux 上 Jasypt 的不一致、缓慢的加密性能

Inconsistent, Slow Encryption Performance with Jasypt on Ubuntu Linux

我正在使用 Jasypt 的 BasicBinaryEncryptor 加密少量二进制数据(大约 1 KB)。我正在使用 Scala,但我怀疑这是否重要。

val encryptor = new BasicBinaryEncryptor
encryptor.setPassword(password)
val encrypted = encryptor.encrypt(bytes.toByteArray())

此加密操作的时间范围从几秒钟不等,但通常 运行 秒到一分钟或更长时间。也好像前几次操作运行还好,后面就变慢了。

我试过 Jasypt 版本 1.9.2 和 1.9.1。此操作在 Ubuntu Linux 14.04(Hotspot JVM 1.8.0_45)和 15.04 上运行缓慢,但 运行 在 Mac OS 上运行良好X(热点 JVM 1.8.0_40-b25)。

关于我可以更改哪些内容以提高 Ubuntu 上的性能的任何想法?

您遇到的问题是由 Jasypt 使用的盐生成器引起的。BasicBinaryEncryptor 使用 StandardPBEByteEncryptor with the default configuration for a SaltGenerator. This results in the use of RandomSaltGenerator which uses SecureRandom(从 Jasypt v1.9.1 开始)。如 markspace 所指出的,如果没有足够的熵可用,SecureRandom 将阻塞。

如果您可以使用 /dev/urandom 而不是 /dev/random,您可以使用 -Djava.security.egd=file:/dev/urandom 启动您的程序,这不会阻塞。

另一种选择是配置您自己的加密器并使用不同的 SaltGenerator。 Jasypt 提供了一些您可以使用的固定 SaltGenerators,或者您可以随机生成一个不使用 SecureRandom 的。

在我们的 Ubuntu 服务器上,我们通过 apt-get 安装了 haveged 软件包。

在此处了解更多信息:http://www.issihosts.com/haveged/

该包默认不安装,但会生成熵。这样做之后,我们可以换回 /dev/random 而不是使用 /dev/urandom.