我目前正在使用scrypt实现密码散列。我已经在GitHub上找到了一个很好的scrypt实现。令我惊讶的是,我还发现了一个 implementation in the Bouncy Castle library。这个类是没有文档的,维基百科没有提到Bouncy城堡作为氪星实现提供者,而且我很难找到任何使用Bouncy scrypt的人的代码示例,所以这在我看来是可疑的。
另一方面,如果我必须在GitHubs密码实现和Bouncy城堡之间进行选择,我更喜欢Bounsi城堡。
有弹性的卡斯尔斯是在监视“真实的东西”吗?我是否可以在JCA上使用Bouncy (或者我是否需要像这里那样直接调用它:AES-256 encryption workflow in scala with bouncy castle: salt and IV usage and transfer/storage)?
编辑:我现在能找到最好的答案:https://www.bouncycastle.org/devmailarchive/msg13653.html
发布于 2020-06-17 08:28:12
我可以从bouncycastle.org邮箱得到最好的答案:
是的,scrypt实现是一个真实的东西-也就是说,代码在那里,并且它通过了官方的测试向量。 有几个注意事项:这个实现没有利用密码破解器会产生的所有并行性/优化,因此存在一些防御/攻击者的不对称。Scrypt还基于Salsa20代码函数,Salsa20在Java中的性能相对较差(与AES相同),而在具有SIMD功能的平台上却执行得非常出色(可能快4-5倍)。 Scrypt提供者没有公开Scrypt-也许我要说的是,JCE只有PBE的成本函数的非常原始的表达式(以interation计数的形式)。氪星有两个成本参数,所以它不能被强制到那个API中。 如果有足够的需求,我想可以通过JCE公开一个硬编码的并行化参数或BC特定的参数规范。
发布于 2017-02-02 00:56:25
这样人们就不必去外部网站寻求答案了:
发布于 2017-07-16 14:54:21
可以使用SCrypt类及其静态方法generate,如下所示:
SCrypt.generate(passwordBytes, salt, costParam, blockSize, parallelization, passwordLength);我不能说您应该为costParam、blockSize或并行化使用什么值,文档并没有给出太多的信息。在我们的研究中,我们每一项都用了8。
链接到他们的文档: BCrypt - https://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/generators/BCrypt.html SCrypt - https://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/generators/SCrypt.html
https://stackoverflow.com/questions/22226867
复制相似问题