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' 4096 16 )
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

相关文章
|
3月前
|
数据安全/隐私保护 Android开发
2023安卓逆向 -- 某合伙apk登录加密分析
2023安卓逆向 -- 某合伙apk登录加密分析
26 0
|
5月前
|
前端开发 JavaScript 数据安全/隐私保护
Jmeter模拟加密密码登录
Jmeter模拟加密密码登录
114 0
|
3月前
|
移动开发 JavaScript 安全
js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
111 0
|
1月前
|
编解码 Java Nacos
nacos常见问题之密码加密配置如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
139 0
|
1月前
|
存储 运维 Nacos
nacos常见问题之连接用户名和密码把明文用户名和密码进行加密如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
184 2
|
5月前
|
druid Java 数据库
德鲁伊druid数据库明文密码加密
德鲁伊druid数据库明文密码加密
372 0
德鲁伊druid数据库明文密码加密
|
1月前
|
算法 前端开发 JavaScript
SpringBoot+随机盐值+双重MD5实现加密登录
SpringBoot+随机盐值+双重MD5实现加密登录
191 1
|
1月前
|
应用服务中间件 Nacos 数据安全/隐私保护
nacos常见问题之如何用明文密码做加密
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
115 0
|
1月前
|
存储 API 数据库
微搭低代码密码加密存储
微搭低代码密码加密存储
|
3月前
|
PHP 数据安全/隐私保护