參考:
很久沒寫部落格,也是沒時間寫,因為平時工作忙,也沒什麼時間寫部落格,今天剛好抽點空,哈哈。
我們公司由於要做應用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):
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(
'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 儲存使用者資料和應用狀態資訊。所有沒有儲存的改變都應該在切向...