Bouncy Castle scrypt实施

Mar*_*ski 12 java bouncycastle 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

小智 5

这样人们就不必再去外部网站找答案了:

  1. 确保有弹性的城堡罐子在您的构建路径上
  2. 像这样导入SCrypt:

    import org.bouncycastle.crypto.generators.SCrypt;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 像这样使用SCrypt:

    byte[] sCryptHash = SCrypt.generate(plaintext.getBytes(), salt.getBytes(), cpuDifficultyFactor, memoryDifficultyFactor, parallelismDifficultyFactor, outputLength);
    
    Run Code Online (Sandbox Code Playgroud)


Mar*_*ski 0

我可以从 bouncycastle.org 邮箱得到的最佳答案:

\n\n
\n

是的,scrypt 实现是真实存在的 - 也就是说代码就在那里,并且它通过了官方测试向量。

\n\n

一些警告:该实现并没有利用密码破解者所采用的所有并行性/优化,因此存在一些防御者/攻击者不对称性。Scrypt 也基于 Salsa20 代码Salsa20 在 Java 中的表现相对较差(与 AES 相当),而在具有 SIMD 功能的平台上表现出色(可能快 4-5 倍)。

\n\n

Scrypt 不是由 BC JCE 提供程序公开的 - 也许我说是因为 JCE 仅具有 PBE 成本函数的非常原始的表达式(以交互计数的形式)。\n Scrypt 有两个成本参数,因此它可以\xe2\x80\x99t 轻易地强制进入该 API。

\n\n

如果有\xe2\x80\x99s足够的需求,我想它可以通过带有硬编码并行化参数或BC特定参数规范的JCE公开。

\n
\n