- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 org.jasypt.encryption.pbe.StandardPBEByteEncryptor 中,当我比较其他几个 key 派生功能时, key 派生看起来有所不同。
initialize() 方法具有以下用于生成 key 的代码:
PBEKeySpec pbeKeySpec = new PBEKeySpec(this.password.toCharArray());
SecretKeyFactory factory = SecretKeyFactory.getInstance(this.algorithm);
this.key = factory.generateSecret(pbeKeySpec);
它没有将盐和迭代计数传递到 PBEKeySpec。
但是 encrypt() 方法有以下代码:
PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, this.keyObtentionIterations);
byte[] encyptedMessage = null;
synchronized (this.encryptCipher) {
this.encryptCipher.init(
Cipher.ENCRYPT_MODE, this.key, parameterSpec);
encyptedMessage = this.encryptCipher.doFinal(message);
}
它具有作为 PBEParameterSpec 传递的盐和迭代计数。
根据 PBKDF2, key 是使用密码、salt 和迭代计数生成的。
在上面的代码中, key 首先在 initialize() 方法中生成,salt、迭代计数在 encrypt() 方法中作为 PBEParameterSpec 传递。
问题是
为什么盐和迭代只在调用加密方法时使用,而它可以在 initialize() 方法中完成?
有什么不同?
我提出这个问题是因为,由于上述实现,当迭代次数增加时,encrypt() 和 decrypt() 操作很慢。
提前致谢。
最佳答案
盐应用于每个加密操作,因为每个加密的消息使用不同的盐。
initialize()
方法只执行一次,其信息对所有执行都是通用的(即加密 key )。而 encrypt()
方法必须处理加密参数 --iteration count 和 salt--,它们对于每个加密操作都是不同的(salt 是)。
因此,提高 encrypt()
和 decrypt()
操作性能的唯一方法是避免为每条被加密的消息生成不同的盐,这意味着有一个固定盐生成器。 Jasypt 1.9.2 包括一项改进,可以检测是否正在使用这种盐生成策略,并且在这种情况下避免在每次加密操作时调用 Cipher#init(...)
。有关详细信息,请参阅更改日志:http://www.jasypt.org/changelogs/jasypt/ChangeLog.txt
免责声明,根据 StackOverflow 规则:我是 jasypt 的作者。
关于java - jasypt PBKDF2 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22372553/
我在 C# 中有以下代码 PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes,
是否有任何 python PBKDF (pkcs12) 实现?请注意,我不是在寻找 PBKDF1 或 PBKDF2 (pkcs5) 实现,而是在寻找 pkcs12 实现。正如本 question 中所
我是一名优秀的程序员,十分优秀!