腌制和散列密码,Java和PHP兼容性


Salting and hashing passwords, Java and PHP compatibility

我正在尝试制作一款将与网站内容相结合的游戏,并且用户帐户将在多个版本的客户端上共享。

问题是密码需要在PHP中进行盐散列,我需要能够通过Java进行验证,我找不到任何关于安全cryptos(如PBKDF2)的信息,并确保PHPJava之间的生成相同。

我看到了一些关于在PHP上使用PBKDF2的信息,或者HmacSHA-1,但没有像Java的"PBKDF2WithHmacSHA1"的名字所建议的那样将它们组合起来。我现在对PHPJava的单独哈希有一个处理。

我如何设置能够在PHP上生成盐和哈希的方法,将其存储在MySQL中,并能够通过Java的哈希函数验证密码?

如果可能的话,我宁愿坚持使用PBKDF2(除非有人能建议一个等价的,可以更好地实现交叉兼容)。

注:我不太确定这篇文章应该放在这里还是放在Crypto SE上。我想,既然我问的是特定的语言,我就先在这里试试。

所以,结果并不像我想象的那么复杂。我发现这个问题说PHP相当于JavaPBKDF2WithHmacSha1sha1算法的hash_pbkdf2函数。从那里,它只是转移salthashPHPJava的问题。结果是这样的:

1) PHP:对于这个,我只是复制了这个家伙的pbkdf2函数,并像他一样生成盐和哈希。

2) Java:所需要发生的只是在字节码转换中做一点改变,它工作得很好。

之后,我所需要做的就是修改Java代码以适应我的服务器/客户端设置(包括二次会话哈希),并通过网络传输解决更多围绕salthash编码和解码的bug,现在它工作得很好。

另一个问题有更详细的答案

尝试使用预构建的用户和密码管理,如JBoss KeyCloak。它基于OAuth2和OpenID Connect等标准,密码重置、用户注册和社交登录等功能都是免费的。它包括Java和JavaScript的连接器。显然PHP的连接器也是可用的。