bugfix
This commit is contained in:
parent
904e2b2bdf
commit
e0916e89b9
@ -10,6 +10,37 @@ from cryptography.hazmat.backends import default_backend
|
||||
from cryptography.hazmat.primitives import serialization
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
|
||||
def write_pubkey_pem(pubkey, pemfile):
|
||||
with open(pemfile, "wb") as f:
|
||||
f.write(
|
||||
pubkey.public_bytes(
|
||||
encoding=serialization.Encoding.PEM,
|
||||
format=serialization.PublicFormat.SubjectPublicKeyInfo
|
||||
)
|
||||
)
|
||||
|
||||
def write_prikey_pem(prikey, pemfile):
|
||||
with open(pemfile, "wb") as f:
|
||||
f.write(
|
||||
prikey.private_bytes(
|
||||
encoding=serialization.Encoding.PEM,
|
||||
#format=serialization.PrivateFormat.TraditionalOpenSSL,
|
||||
format=serialization.PrivateFormat.PKCS8, # 指定为 PKCS#8 格式
|
||||
encryption_algorithm=serialization.NoEncryption() # 可设置加密
|
||||
)
|
||||
)
|
||||
|
||||
def get_rsa_pubkey_from_pemstr(pemstr):
|
||||
# 加载公钥
|
||||
pem = pemstr.encode('utf-8')
|
||||
public_key = serialization.load_pem_public_key(pem)
|
||||
return public_key
|
||||
|
||||
def get_rsa_prikey_from_pemstr(pemstr):
|
||||
pem = pemstr.encode('utf-8')
|
||||
private_key = serialization.load_pem_private_key(pem, password=None)
|
||||
return private_key
|
||||
|
||||
def get_rsa_pubkey_from_b64keystring(b64ks):
|
||||
der_data = base64.b64decode(b64ks)
|
||||
# 加载公钥
|
||||
@ -19,11 +50,7 @@ def get_rsa_pubkey_from_b64keystring(b64ks):
|
||||
def pubkey_encode(pubkey, bin):
|
||||
ciphertext = pubkey.encrypt(
|
||||
bin,
|
||||
asym_padding.OAEP(
|
||||
mgf=asym_padding.MGF1(algorithm=hashes.SHA256()),
|
||||
algorithm=hashes.SHA256(),
|
||||
label=None
|
||||
)
|
||||
asym_padding.PKCS1v15()
|
||||
)
|
||||
|
||||
# 输出 base64 编码后的密文
|
||||
@ -39,11 +66,7 @@ def prikey_decode(prikey, text):
|
||||
ciphertext = base64.b64decode(text)
|
||||
plaintext = prikey.decrypt(
|
||||
ciphertext,
|
||||
asym_padding.OAEP(
|
||||
mgf=asym_padding.MGF1(algorithm=hashes.SHA256()),
|
||||
algorithm=hashes.SHA256(),
|
||||
label=None
|
||||
)
|
||||
asym_padding.PKCS1v15()
|
||||
)
|
||||
return plaintext
|
||||
|
||||
@ -74,8 +97,19 @@ def data_jj_encode(data, pubkey_b64str):
|
||||
""" return a dict with:
|
||||
AESKey:aes key encrypted by public key
|
||||
data: data encrypted by aes key
|
||||
步骤说明:
|
||||
1. 从pemstr生成公钥
|
||||
2. 生成随机的aes密钥
|
||||
3. 用公钥加密aes密钥到aes_key_cyber
|
||||
4. 将data数据用json转换为字符串js
|
||||
5. 用aes密钥将js字符串加密到data_cyber
|
||||
6. 将data_cyber用base64编码到data_cyber_b64
|
||||
7. 构造返回字典:{
|
||||
'AESKey': aes_key_cyber,
|
||||
'data': data_cyber_b64
|
||||
},并返回
|
||||
"""
|
||||
pubkey = get_rsa_pubkey_from_b64keystring(pubkey_b64str)
|
||||
pubkey = get_rsa_pubkey_from_pemstr(pubkey_b64str)
|
||||
aes_key = generate_key()
|
||||
print(f'{aes_key=}')
|
||||
aes_key_cyber = pubkey_encode(pubkey, aes_key)
|
||||
@ -89,7 +123,7 @@ def data_jj_encode(data, pubkey_b64str):
|
||||
}
|
||||
|
||||
def data_jj_decode(cdata, prikey_b64str):
|
||||
prikey = get_rsa_prikey_from_b64keystring(prikey_str)
|
||||
prikey = get_rsa_prikey_from_pemstr(prikey_str)
|
||||
aes_key = prikey_decode(prikey, cdata['AESKey'])
|
||||
print(f'{aes_key=}')
|
||||
js_cyber = base64.b64decode(cdata['data'])
|
||||
@ -117,15 +151,16 @@ if __name__ == '__main__':
|
||||
"filed2": 2,
|
||||
"field3": "r32g"
|
||||
}
|
||||
pubkey_str="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3LWvOQCufDQpf9PsOrBF" + \
|
||||
pubkey_str="-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3LWvOQCufDQpf9PsOrBF" + \
|
||||
"SsjPqIg/x1YZpQ4MksZs4BwHWjHT9PHoJ88OZl2cXmyaY6Hde2KXG1v873lI70/2" + \
|
||||
"oUizX8Fyl0TTliAQ/p/kSsmgHfzhY+KOZUQ5HwXwnjFKv1q+Y0PpseNPFFHGiB1H" + \
|
||||
"/6p8kJeV61GN00etwvAvDdfZKm9W6t1ByD9Bsr3/VSHJtv1DqVdgmVMxnI7W4mx6" + \
|
||||
"UmseGmywngLvBHXI0+MWRK1RszCMISA6SsKTlT9IdT/r64vLht+NImEY6KPwODpu" + \
|
||||
"6vBUSyRqbGVitZ6PPIPwzLkB8LZ69eTjK5SMXP6RD7kHio+vb4ljHWXzDfRH9HXq" + \
|
||||
"FQIDAQAB"
|
||||
"FQIDAQAB\n-----END PUBLIC KEY-----"
|
||||
|
||||
prikey_str = (
|
||||
"-----BEGIN PRIVATE KEY-----\n"
|
||||
"MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDcta85AK58NCl/"
|
||||
"0+w6sEVKyM+oiD/HVhmlDgySxmzgHAdaMdP08egnzw5mXZxebJpjod17YpcbW/zv"
|
||||
"eUjvT/ahSLNfwXKXRNOWIBD+n+RKyaAd/OFj4o5lRDkfBfCeMUq/Wr5jQ+mx408U"
|
||||
@ -151,13 +186,16 @@ if __name__ == '__main__':
|
||||
"5FBIZUp8xGEuHxIXA0D3ldmo2oswdMx5ZA9JtGcPUQKBgQDtlyIeU8p9wTgCLYn8"
|
||||
"PVrVMJNiLv4zvJdmQNkBQmNIC67mLUGcZRZRfskk4hYB8sglAGkHZIUBDMFk785+"
|
||||
"grB5Y0Rn7RAuzVs6uoibwAx4u3rEjENR0gOdyzMATzqjgWL8GnrG5QU6VHRIVwr6"
|
||||
"ni/+cSjJYn6PolxPdurAZXYhqQ=="
|
||||
"ni/+cSjJYn6PolxPdurAZXYhqQ==\n"
|
||||
"-----END PRIVATE KEY-----"
|
||||
)
|
||||
pubkey = get_rsa_pubkey_from_b64keystring(pubkey_str)
|
||||
prikey = get_rsa_prikey_from_b64keystring(prikey_str)
|
||||
pubkey = get_rsa_pubkey_from_pemstr(pubkey_str)
|
||||
prikey = get_rsa_prikey_from_pemstr(prikey_str)
|
||||
key_crypt = pubkey_encode(pubkey, key_b64)
|
||||
key_b64T = prikey_decode(prikey, key_crypt)
|
||||
print(f"RSA加密{key_b64=}==>{key_crypt=}, \n解密==>{key_b64T=}")
|
||||
x = data_jj_encode(d, pubkey_str)
|
||||
d1 = data_jj_decode(x, prikey_str)
|
||||
print(f'{d=}, {d1=}')
|
||||
print(json.dumps(x, indent=4))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user