harbor的加密機制與後台修改登入密碼

2021-09-20 22:49:41 字數 4352 閱讀 6127

參考:

很久沒寫部落格,也是沒時間寫,因為平時工作忙,也沒什麼時間寫部落格,今天剛好抽點空,哈哈。

我們公司由於要做應用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

importhmac

importhashlib

fromstructimportstruct

fromoperatorimportxor

fromitertoolsimportizip, starmap

_pack_int=struct('>i').pack

defpbkdf2_hex(data, salt, iterations=4096, keylen=16, hashfunc=none):

returnpbkdf2_bin(data, salt, iterations, keylen, hashfunc).encode('hex')

defpbkdf2_bin(data, salt, iterations=4096, keylen=16, hashfunc=none):

hashfunc=hashfuncorhashlib.sha1

mac=hmac.new(data,none, hashfunc)

def_pseudorandom(x, mac=mac):

h=mac.copy()

h.update(x)

returnmap(ord, h.digest())

buf=

forblockinxrange(1,-(-keylen//mac.digest_size)+1):

rv=u=_pseudorandom(salt+_pack_int(block))

foriinxrange(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('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()

ziwenzhou

加密機制理解與專案經驗

1 對稱加密。雙方使用相同的秘鑰進行加密解密。例如 des演算法 aes演算法 des的高階版本 2 非對稱加密 雙方都有自己的一套公私秘鑰。使用公鑰加密,對方使用私鑰解密。rsa演算法說明 1 公私金鑰成對存在,私鑰可以推算出公鑰,公鑰不能推算出私鑰。2 使用私鑰加密的內容,只能通過公鑰來解密 使...

Https的加密機制

對稱加密就是有乙個金鑰,他可以對一段內容進行加密,加密後只能用它才能解密看到內容 使用對稱加密可行嗎?如果通訊雙方各持有同乙個金鑰,且沒有別人知道,這兩方的通訊安全當然可以是被保證的。那麼最大的問題是這個金鑰怎麼傳輸只讓雙方知曉,同時不被別人知道。如果瀏覽器生成乙個金鑰並傳送給瀏覽器,這個傳輸過程種...

IOS後台執行機制 與 動作

注 應用從froeground切換到background只有在支援多工並且執行ios4.0或更新版本系統的裝置上才會發生。所有其它的情況,應用不是切向後台,而是直接終止,並且從記憶體中清除。應用切向後台background時應該做什麼 2 儲存使用者資料和應用狀態資訊。所有沒有儲存的改變都應該在切向...