将我的java应用程序与fosuserbundle的表用户同步
我正在尝试创建一个桌面应用程序(java),它指向我的网站的同一个数据库(使用symfony 2创建),但我有一个问题,我无法使用fosuserBundle生成的相同加密类型将我的java应用程序与fosuserbundle的表用户同步,java,symfony,encryption,fosuserbundle,Java,Symfony,Encryption,Fosuserbundle,我正在尝试创建一个桌面应用程序(java),它指向我的网站的同一个数据库(使用symfony 2创建),但我有一个问题,我无法使用fosuserBundle生成的相同加密类型sha512在列“password”和“salt”中插入,我不知道fosuserBundle如何生成“salt”值 我的编码器当前设置为: security: encoders: FOS\UserBundle\Model\UserInterface: sha512 检查FOS\UserBundle\Model\Us
sha512
在列“password”和“salt”中插入,我不知道fosuserBundle如何生成“salt”值
我的编码器当前设置为:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
检查
FOS\UserBundle\Model\User
构造方法:
public function __construct()
{
$this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
$this->enabled = false;
$this->locked = false;
$this->expired = false;
$this->roles = array();
$this->credentialsExpired = false;
}
最后,我找到了一个解决方案,让表fos_用户中的字段“salt”可以忽略不计,就是让这个方法只返回密码
namespace Symfony\Component\Security\Core\Encoder;
protected function mergePasswordAndSalt($password, $salt)
{
if (empty($salt)) {
return $password;
}
if (false !== strrpos($salt, '{') || false !== strrpos($salt, '}')) {
throw new \InvalidArgumentException('Cannot use { or } in salt.');
}
return $password;
}
感谢paul为我的网站提供的答案一切都很好,但是尝试使用java插入这些字段我不知道如何处理什么意思-我不能在“password”和“salt”列中插入
?我的意思是,当我尝试添加使用java的用户时,我们必须使用fosuserBundle使用的相同哈希算法定义这些列。所有这些都允许我从桌面应用添加用户,并使用网站连接相同的标识。我想,如果您从java应用创建新用户,那么您可以根据需要设置任何salt-您可以只需按照与Symfony
相同的方式对密码进行编码。然后,您应该可以在这两个地方登录。您不能修改现有用户并尝试匹配密码!这是行不通的。你需要精确地回答你的问题!您询问salt ks是如何生成的,或者用户密码是如何基于该salt编码的?要记录用户,您需要在java应用程序中应用当前密码编码器(来自Symfony)的逻辑。salt是随机生成的。然后对每个密码进行加密和散列。为了检查密码,您必须执行相同的步骤,并检查数据库中的哈希值是否与根据提供的密码生成的哈希值相同。