harbor的加密机制与后台修改登录密码

   参考:https://github.com/mitsuhiko/python-pbkdf2/blob/master/pbkdf2.py

        很久没写博客,也是没时间写,因为平时工作忙,也没什么时间写博客,今天刚好抽点空,哈哈。

我们公司由于要做应用docker化,所以免不了要用harbor来存储docker镜像,比较方便。然而我们设想一下,如果哪天你的web登录密码忘了,而管理员的web登录密码也忘了,那该如何修改密码呢?

毫无疑问我们只能进harbor的后台mysql进行修改,但是查资料发现,这个harbor中的mysql的密码是采用pbkdf2算法,调用的Hash函数为Sha1,迭代4096次,密钥长度为int型16位得出的,所以你常规的用明文密码去update是不行的,必须要通过算法将密钥算出来,然后update可以成功。

下面是密钥计算算法,计算明文为123QWEqwe, 盐值为gktqer4zml32472wmht9xeuixvg5pvjd, 迭代次数为4096, 密钥长度int型16位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
    mac = hmac.new(data, None, hashfunc)
    def _pseudorandom(x, mac=mac):
        = mac.copy()
        h.update(x)
        return map(ord, h.digest())
    buf = []
    for block in xrange(1-(-keylen // mac.digest_size) + 1):
        rv = = _pseudorandom(salt + _pack_int(block))
        for in xrange(iterations - 1):
            = _pseudorandom(''.join(map(chr, u)))
            rv = starmap(xor, izip(rv, u))
        buf.extend(rv)
    return ''.join(map(chr, buf))[:keylen]
rv = pbkdf2_hex('123QWEqwe''gktqer4zml32472wmht9xeuixvg5pvjd'409616)
print(rv)

计算出密钥值为65e900b5a2bdff474e29d0d2b21f4945


下面更新下数据库,修改用户名为testc的密码:update user set password='65e900b5a2bdff474e29d0d2b21f4945' where name='testc';

前台web登录账号:testc

前台web登录密码:123QWEqwe




再带上一个随机出salt值的代码:

#32位随机密码

from random import choice

import string

def Makepass(length=32, chars=string.letters+string.digits):

    return ''.join([choice(chars) for i in range(length)])

if __name__ == '__main__':

    for i in range(10):

        print Makepass()

本文转自飞奔的小GUI博客51CTO博客,原文链接http://blog.51cto.com/9237101/2057032如需转载请自行联系原作者


ziwenzhou

上一篇:10 分钟让你明白 MySQL 是如何利用索引的


下一篇:安卓使用SQlite3数据库无法id主键无法自动增加?不是的。