代码之家  ›  专栏  ›  技术社区  ›  gregn

带有python passlib的Spring兼容scrypt密码

  •  0
  • gregn  · 技术社区  · 6 年前

    如何从python生成与Spring兼容的密码?

    {scrypt}$e0801$qaqc0fvhy6ijpysiqsfnorcug205njho/6o+idxdn33lxmzocvbhb4naqdafhugmykcxqtmi5xp5zb57mymur3q==$sBeXCHOm6zQuGdSDKs+HeXnNQGg3bhRidmL+HU/ZTMM=

    我正在尝试使用python和passlib直接用新密码更新数据库,但是无法预测passlib的正确设置 $e0801$ :

    >>> from passlib.hash import scrypt
    >>> scrypt.verify('wBkfoBsxj9u3wLOZ', '{scrypt}$e0801$QAqC0fvhY6iJPysiQsFnrcUg205njHo/6o+IDXDn33lxmZOCVBhb4NAqdafhuGmykCxQtMI5xP5zb7MYMUrU3Q==$sBeXCHOm6zQuGdSDKs+HeXnNQGg3bhRidmL+HU/ZTMM=')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/gregn/.pyenv/versions/v2.7.16/lib/python2.7/site-packages/passlib/utils/handlers.py", line 789, in verify
        self = cls.from_string(hash, **context)
      File "/home/gregn/.pyenv/versions/v2.7.16/lib/python2.7/site-packages/passlib/handlers/scrypt.py", line 177, in from_string
        return cls(**cls.parse(hash))
      File "/home/gregn/.pyenv/versions/v2.7.16/lib/python2.7/site-packages/passlib/handlers/scrypt.py", line 181, in parse
        ident, suffix = cls._parse_ident(hash)
      File "/home/gregn/.pyenv/versions/v2.7.16/lib/python2.7/site-packages/passlib/utils/handlers.py", line 1207, in _parse_ident
        raise exc.InvalidHashError(cls)
    ValueError: not a valid scrypt hash
    

    手动修改前缀格式无效:

    >>> scrypt.verify('wBkfoBsxj9u3wLOZ', '$scrypt$ln=1,r=8,p=1$QAqC0fvhY6iJPysiQsFnrcUg205njHo/6o+IDXDn33lxmZOCVBhb4NAqdafhuGmykCxQtMI5xP5zb7MYMUrU3Q==$sBeXCHOm6zQuGdSDKs+HeXnNQGg3bhRidmL+HU/ZTMM=')
    False
    

    我认为(但不确定)Spring正在使用默认的scryptppasswordencoder设置,因为我发现:

    public static PasswordEncoder getPasswordEncoder() {
        final String encodingId = "scrypt";
        final Map<String, PasswordEncoder> encoders = new HashMap<>();
        encoders.put("bcrypt", new BCryptPasswordEncoder());
        encoders.put(encodingId, new SCryptPasswordEncoder());
        return new DelegatingPasswordEncoder(encodingId, encoders);
    }
    

    春季版:

      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::       (v1.5.18.RELEASE)
    

    0 回复  |  直到 6 年前