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.primitives import serialization
|
||||||
from cryptography.hazmat.backends import default_backend
|
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):
|
def get_rsa_pubkey_from_b64keystring(b64ks):
|
||||||
der_data = base64.b64decode(b64ks)
|
der_data = base64.b64decode(b64ks)
|
||||||
# 加载公钥
|
# 加载公钥
|
||||||
@ -19,11 +50,7 @@ def get_rsa_pubkey_from_b64keystring(b64ks):
|
|||||||
def pubkey_encode(pubkey, bin):
|
def pubkey_encode(pubkey, bin):
|
||||||
ciphertext = pubkey.encrypt(
|
ciphertext = pubkey.encrypt(
|
||||||
bin,
|
bin,
|
||||||
asym_padding.OAEP(
|
asym_padding.PKCS1v15()
|
||||||
mgf=asym_padding.MGF1(algorithm=hashes.SHA256()),
|
|
||||||
algorithm=hashes.SHA256(),
|
|
||||||
label=None
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# 输出 base64 编码后的密文
|
# 输出 base64 编码后的密文
|
||||||
@ -39,11 +66,7 @@ def prikey_decode(prikey, text):
|
|||||||
ciphertext = base64.b64decode(text)
|
ciphertext = base64.b64decode(text)
|
||||||
plaintext = prikey.decrypt(
|
plaintext = prikey.decrypt(
|
||||||
ciphertext,
|
ciphertext,
|
||||||
asym_padding.OAEP(
|
asym_padding.PKCS1v15()
|
||||||
mgf=asym_padding.MGF1(algorithm=hashes.SHA256()),
|
|
||||||
algorithm=hashes.SHA256(),
|
|
||||||
label=None
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
return plaintext
|
return plaintext
|
||||||
|
|
||||||
@ -74,8 +97,19 @@ def data_jj_encode(data, pubkey_b64str):
|
|||||||
""" return a dict with:
|
""" return a dict with:
|
||||||
AESKey:aes key encrypted by public key
|
AESKey:aes key encrypted by public key
|
||||||
data: data encrypted by aes 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()
|
aes_key = generate_key()
|
||||||
print(f'{aes_key=}')
|
print(f'{aes_key=}')
|
||||||
aes_key_cyber = pubkey_encode(pubkey, 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):
|
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'])
|
aes_key = prikey_decode(prikey, cdata['AESKey'])
|
||||||
print(f'{aes_key=}')
|
print(f'{aes_key=}')
|
||||||
js_cyber = base64.b64decode(cdata['data'])
|
js_cyber = base64.b64decode(cdata['data'])
|
||||||
@ -117,15 +151,16 @@ if __name__ == '__main__':
|
|||||||
"filed2": 2,
|
"filed2": 2,
|
||||||
"field3": "r32g"
|
"field3": "r32g"
|
||||||
}
|
}
|
||||||
pubkey_str="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3LWvOQCufDQpf9PsOrBF" + \
|
pubkey_str="-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3LWvOQCufDQpf9PsOrBF" + \
|
||||||
"SsjPqIg/x1YZpQ4MksZs4BwHWjHT9PHoJ88OZl2cXmyaY6Hde2KXG1v873lI70/2" + \
|
"SsjPqIg/x1YZpQ4MksZs4BwHWjHT9PHoJ88OZl2cXmyaY6Hde2KXG1v873lI70/2" + \
|
||||||
"oUizX8Fyl0TTliAQ/p/kSsmgHfzhY+KOZUQ5HwXwnjFKv1q+Y0PpseNPFFHGiB1H" + \
|
"oUizX8Fyl0TTliAQ/p/kSsmgHfzhY+KOZUQ5HwXwnjFKv1q+Y0PpseNPFFHGiB1H" + \
|
||||||
"/6p8kJeV61GN00etwvAvDdfZKm9W6t1ByD9Bsr3/VSHJtv1DqVdgmVMxnI7W4mx6" + \
|
"/6p8kJeV61GN00etwvAvDdfZKm9W6t1ByD9Bsr3/VSHJtv1DqVdgmVMxnI7W4mx6" + \
|
||||||
"UmseGmywngLvBHXI0+MWRK1RszCMISA6SsKTlT9IdT/r64vLht+NImEY6KPwODpu" + \
|
"UmseGmywngLvBHXI0+MWRK1RszCMISA6SsKTlT9IdT/r64vLht+NImEY6KPwODpu" + \
|
||||||
"6vBUSyRqbGVitZ6PPIPwzLkB8LZ69eTjK5SMXP6RD7kHio+vb4ljHWXzDfRH9HXq" + \
|
"6vBUSyRqbGVitZ6PPIPwzLkB8LZ69eTjK5SMXP6RD7kHio+vb4ljHWXzDfRH9HXq" + \
|
||||||
"FQIDAQAB"
|
"FQIDAQAB\n-----END PUBLIC KEY-----"
|
||||||
|
|
||||||
prikey_str = (
|
prikey_str = (
|
||||||
|
"-----BEGIN PRIVATE KEY-----\n"
|
||||||
"MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDcta85AK58NCl/"
|
"MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDcta85AK58NCl/"
|
||||||
"0+w6sEVKyM+oiD/HVhmlDgySxmzgHAdaMdP08egnzw5mXZxebJpjod17YpcbW/zv"
|
"0+w6sEVKyM+oiD/HVhmlDgySxmzgHAdaMdP08egnzw5mXZxebJpjod17YpcbW/zv"
|
||||||
"eUjvT/ahSLNfwXKXRNOWIBD+n+RKyaAd/OFj4o5lRDkfBfCeMUq/Wr5jQ+mx408U"
|
"eUjvT/ahSLNfwXKXRNOWIBD+n+RKyaAd/OFj4o5lRDkfBfCeMUq/Wr5jQ+mx408U"
|
||||||
@ -151,13 +186,16 @@ if __name__ == '__main__':
|
|||||||
"5FBIZUp8xGEuHxIXA0D3ldmo2oswdMx5ZA9JtGcPUQKBgQDtlyIeU8p9wTgCLYn8"
|
"5FBIZUp8xGEuHxIXA0D3ldmo2oswdMx5ZA9JtGcPUQKBgQDtlyIeU8p9wTgCLYn8"
|
||||||
"PVrVMJNiLv4zvJdmQNkBQmNIC67mLUGcZRZRfskk4hYB8sglAGkHZIUBDMFk785+"
|
"PVrVMJNiLv4zvJdmQNkBQmNIC67mLUGcZRZRfskk4hYB8sglAGkHZIUBDMFk785+"
|
||||||
"grB5Y0Rn7RAuzVs6uoibwAx4u3rEjENR0gOdyzMATzqjgWL8GnrG5QU6VHRIVwr6"
|
"grB5Y0Rn7RAuzVs6uoibwAx4u3rEjENR0gOdyzMATzqjgWL8GnrG5QU6VHRIVwr6"
|
||||||
"ni/+cSjJYn6PolxPdurAZXYhqQ=="
|
"ni/+cSjJYn6PolxPdurAZXYhqQ==\n"
|
||||||
|
"-----END PRIVATE KEY-----"
|
||||||
)
|
)
|
||||||
pubkey = get_rsa_pubkey_from_b64keystring(pubkey_str)
|
pubkey = get_rsa_pubkey_from_pemstr(pubkey_str)
|
||||||
prikey = get_rsa_prikey_from_b64keystring(prikey_str)
|
prikey = get_rsa_prikey_from_pemstr(prikey_str)
|
||||||
key_crypt = pubkey_encode(pubkey, key_b64)
|
key_crypt = pubkey_encode(pubkey, key_b64)
|
||||||
key_b64T = prikey_decode(prikey, key_crypt)
|
key_b64T = prikey_decode(prikey, key_crypt)
|
||||||
print(f"RSA加密{key_b64=}==>{key_crypt=}, \n解密==>{key_b64T=}")
|
print(f"RSA加密{key_b64=}==>{key_crypt=}, \n解密==>{key_b64T=}")
|
||||||
x = data_jj_encode(d, pubkey_str)
|
x = data_jj_encode(d, pubkey_str)
|
||||||
d1 = data_jj_decode(x, prikey_str)
|
d1 = data_jj_decode(x, prikey_str)
|
||||||
print(f'{d=}, {d1=}')
|
print(f'{d=}, {d1=}')
|
||||||
|
print(json.dumps(x, indent=4))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user