python Jenkins密码散列和编码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python Jenkins密码散列和编码相关的知识,希望对你有一定的参考价值。
import bcrypt
import math
import re
import sys
import base64
from hashlib import sha256
from Crypto.Cipher import AES
MAGIC = "::::MAGIC::::"
def hash_password(password):
if isinstance(password, str):
return bcrypt.hashpw(password, bcrypt.gensalt(prefix=b"2a"))
def encode_password(password):
master_key = open(sys.argv[1]).read()
hudson_secret_key = open(sys.argv[2], 'rb').read()
hashed_master_key = sha256(master_key).digest()[:16]
o = AES.new(hashed_master_key, AES.MODE_ECB)
x = o.decrypt(hudson_secret_key)
assert MAGIC in x
k = x[:-16]
k = k[:16]
target_length = int(math.ceil(float(len(password + MAGIC)) / 16) * 16)
password_extended = password + MAGIC + "".join(
[chr(11) for i in range(0, target_length - len(password + MAGIC))])
o = AES.new(k, AES.MODE_ECB)
x = o.encrypt(password_extended)
return base64.encodestring(x)
def decode_password(encoded_password):
master_key = open(sys.argv[1]).read()
hudson_secret_key = open(sys.argv[2], 'rb').read()
hashed_master_key = sha256(master_key).digest()[:16]
o = AES.new(hashed_master_key, AES.MODE_ECB)
x = o.decrypt(hudson_secret_key)
assert MAGIC in x
k = x[:-16]
k = k[:16]
p = base64.decodestring(encoded_password)
o = AES.new(k, AES.MODE_ECB)
x = o.decrypt(p)
assert MAGIC in x
return re.findall('(.*)' + MAGIC, x)[0]
以上是关于python Jenkins密码散列和编码的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP 的 password_hash 来散列和验证密码
如何使用 PHP 的 password_hash 来散列和验证密码
Python中的密码加密和解密
如何在 Ktor 中散列和验证密码?
python序列的修改散列和切片
流畅python学习笔记:第十章:序列的修改,散列和切片