Harbor修改用户名密码后仍然无法登陆

现象: docker修改了配置,导致harbor无法登陆,按照网上给的教程,在数据库中重置了密码,但是还是登陆失败。

解决: 最近重装了harbor环境,看了下数据库,发现数据库中加密方式有区别,admin为sha256加密方式。修改脚本后,算出来和数据库中的值完全相同。bingo~~

计算密码脚本:

import hmac
import hashlib
from struct import Struct
from operator import xor
from itertools import izip, starmap


_pack_int = Struct('>I').pack


def pbkdf2_hex(data, salt, iterations=4096, keylen=16, hashfunc=None):
    return pbkdf2_bin(data, salt, iterations, keylen, hashfunc).encode('hex')


def pbkdf2_bin(data, salt, iterations=4096, keylen=16, hashfunc=None):
    #原hashfunc = hashfunc or hashlib.sha1  
    hashfunc = hashfunc or hashlib.sha256  # 加密方式是sha256
    mac = hmac.new(data, None, hashfunc)

    def _pseudorandom(x, mac=mac):
        h = mac.copy()
        h.update(x)
        return map(ord, h.digest())
    buf = []
    for block in xrange(1, -(-keylen // mac.digest_size) + 1):
        rv = u = _pseudorandom(salt + _pack_int(block))
        for i in xrange(iterations - 1):
            u = _pseudorandom(''.join(map(chr, u)))
            rv = starmap(xor, izip(rv, u))
        buf.extend(rv)
    return ''.join(map(chr, buf))[:keylen]


rv = pbkdf2_hex('Harbor12345', 'Y3fhnlvqtqzBwEcU8IWVTJJW7R8hjN4r', 4096, 16)
print(rv)
  • 注意点:
    • 盐值和数据库中保持一致
    • 检查数据库中加密方式一列

在这里插入图片描述


版权声明:本文为dou_d原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。