所以我有一个运行php的wesbite,它使用诸如
之类的行来加密所有密码password_hash($_POST['password'], PASSWORD_BCRYPT, $options)
并验证密码如下
$passwordCheck = password_verify($password, $row['password']);
选项变量为:
$options = ['cost' => 00];
我已将这个数字排除在00之外,但当然还有其他不确定是否与我相关而不给出该数字。
这是问题, 我正在运行一个在java中运行的SmartFox服务器。我正在使用登录助手(也许我可能不需要,请继续阅读)并尝试将我发送给它的密码作为纯文本密码进行比较,当然MySql密码正在使用BCrypt。现在在它引用的文档中我可以设置注册使用Md5,所以我认为我必须能够支持这种类型的密码检查。
使用md5 http://docs2x.smartfoxserver.com/api-docs/asdoc/com/smartfoxserver/v2/util/PasswordUtil.html
登录助手文档 http://docs2x.smartfoxserver.com/DevelopmentBasics/login-assistant
我相信我可以尝试以下方法,但请不要犹豫,告诉我从另一个角度来看待这个或者其中一个不起作用(因为我不理解哈希/加密/盐/彩虹等等) :
我可以在我发送密码的c#应用程序中转换密码,并让服务器对数据库进行检查
如果预处理器告诉我匹配,我可以使用预处理器转换密码并检查密码并将密码设置为数据库中的密码
如果java上没有BCrypt
,请让java执行php脚本答案 0 :(得分:0)
如果我没有错,我认为你是哈希,而不是加密密码。由于PHP中的BCrypt可以用来做两者,因此名称很重要。
避免使用MD5,现在它被认为是破碎的 - 你有在线搜索http://www.hashkiller.co.uk/和分布式强制执行工具,这些工具甚至可能需要数小时或更短的时间来破坏新的MD5哈希。
问题还不完全清楚,但让我试试:你控制$ row ['password']的存储方式,但是你在php中使用了BCrypt“标准”并且似乎没有相应的在Java中。所以你不能从java程序中读取/写入$ row ['password'],至少它是有效的。这是对的吗?
如果是这种情况,那么前面的问题How do you use bcrypt for hashing passwords in PHP?解释了什么是BCrypt,你可以找到一个在Java中实现相同算法的库。但我不会建议这种方法,而我会在最佳答案中使用同一页面中列出的可移植PHP哈希函数之一(这应该是列表中的第一种方法?)
预处理器的第二种方法尚不清楚,但一般提示:简单更好,安全性更好。如果它听起来有点“奇怪”或“麻烦”,请避免它,用易于解释的东西替换它,“看起来很好”,并且可以很容易地映射到一个众所周知/记录的解决方案。
答案 1 :(得分:0)
在Java here中有BCrypt的实现。我在几个应用程序中都使用了它。我什至实现了一个GUI来生成散列并测试匹配的纯文本。 BCryptGenerator