我正在尝试制作一款将与网站内容相结合的游戏,并且用户帐户将在多个版本的客户端上共享。
问题是密码需要在PHP
中进行盐散列,我需要能够通过Java
进行验证,我找不到任何关于安全cryptos
(如PBKDF2
)的信息,并确保PHP
和Java
之间的生成相同。
我看到了一些关于在PHP
上使用PBKDF2
的信息,或者Hmac
与SHA-1
,但没有像Java的"PBKDF2WithHmacSHA1
"的名字所建议的那样将它们组合起来。我现在对PHP
或Java
的单独哈希有一个处理。
我如何设置能够在PHP
上生成盐和哈希的方法,将其存储在MySQL
中,并能够通过Java的哈希函数验证密码?
如果可能的话,我宁愿坚持使用PBKDF2
(除非有人能建议一个等价的,可以更好地实现交叉兼容)。
注:我不太确定这篇文章应该放在这里还是放在Crypto SE上。我想,既然我问的是特定的语言,我就先在这里试试。
所以,结果并不像我想象的那么复杂。我发现这个问题说PHP
相当于Java
的PBKDF2WithHmacSha1
是sha1
算法的hash_pbkdf2
函数。从那里,它只是转移salt
和hash
从PHP
到Java
的问题。结果是这样的:
1) PHP
:对于这个,我只是复制了这个家伙的pbkdf2
函数,并像他一样生成盐和哈希。
2) Java
:所需要发生的只是在字节码转换中做一点改变,它工作得很好。
之后,我所需要做的就是修改Java
代码以适应我的服务器/客户端设置(包括二次会话哈希),并通过网络传输解决更多围绕salt
和hash
编码和解码的bug,现在它工作得很好。
另一个问题有更详细的答案
尝试使用预构建的用户和密码管理,如JBoss KeyCloak。它基于OAuth2和OpenID Connect等标准,密码重置、用户注册和社交登录等功能都是免费的。它包括Java和JavaScript的连接器。显然PHP的连接器也是可用的。