将我的java应用程序与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

我正在尝试创建一个桌面应用程序(java),它指向我的网站的同一个数据库(使用symfony 2创建),但我有一个问题,我无法使用fosuserBundle生成的相同加密类型
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是随机生成的。然后对每个密码进行加密和散列。为了检查密码,您必须执行相同的步骤,并检查数据库中的哈希值是否与根据提供的密码生成的哈希值相同。