Bouncy Castle scrypt实施

我目前正在使用scrypt实现密码哈希。 我已经在GitHub上找到了一个很好的scrypt实现。 令我惊讶的是,我还在Bouncy Castle图书馆中发现了一个scrypt实现 。 这个类没有记录,维基百科没有提到Bouncy Castle作为scrypt实现提供者,我真的很难找到使用Bouncy Castles scrypt的人的任何代码示例,所以这看起来有些可疑。

另一方面,如果我不得不在GitHubs加密实现和Bouncy Castle之间做出选择,我宁愿选择Bouncy Castle。

那么Bouncy Castles是否会破坏 “真实的东西”? 我可以使用Bouncy Castles scrypt而不是JCA提供者API(或者我是否需要像这里一样直接调用它: 带有充气城堡的scala中的AES-256加密工作流程:盐和IV的使用和传输/存储 )?


编辑:我现在可以得到的最佳答案: https : //www.bouncycastle.org/devmailarchive/msg13653.html

这样人们就不必去外部网站寻求答案:

  1. 确保充气城堡jar子在您的构建路径上
  2. 像这样导入SCrypt:

    import org.bouncycastle.crypto.generators.SCrypt; 
  3. 像这样使用SCrypt:

     byte[] sCryptHash = SCrypt.generate(plaintext.getBytes(), salt.getBytes(), cpuDifficultyFactor, memoryDifficultyFactor, parallelismDifficultyFactor, outputLength); 

您可以使用SCrypt类及其静态方法generate如下:

 SCrypt.generate(passwordBytes, salt, costParam, blockSize, parallelization, passwordLength); 

我无法真正说出你应该为costParam,blockSize或并行化使用什么值,文档对它没有太多说明。 在我们的研究中,我们每个人使用8。

链接到他们的docus:BCrypt – https://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/generators/BCrypt.html SCrypt – https://www.bouncycastle.org/docs/docs1。 5ON /组织/ BouncyCastle的/密码/发电机/ SCrypt.html