Python生成RSA金鑰對 and 物件的序列化

2021-10-09 05:33:59 字數 3528 閱讀 6333

# rsa加密解密

import rsa

# 序列化物件

import pickle

class

rsaobj

(object):

"""rsa物件"""

def__init__

(self)

:"""初始化公鑰和私鑰"""

# 公鑰

self.public_key =

none

# 私鑰

self.private_key =

none

# 生成公鑰和私鑰檔案到本地

self.export_keys(

) @staticmethod

defexport_keys

(public_key_name=

"public.key"

, private_key_name=

"private.key"):

"""生成新的鑰匙對,匯出物件到本地"""

# 生成新的公鑰和私鑰

public_key, private_key = rsa.newkeys(

512)

# 將公鑰匯出到本地檔案

with

open

(public_key_name,

"wb"

)as public_file:

pickle.dump(public_key, public_file)

# 將私鑰匯出到本地檔案

with

open

(private_key_name,

"wb"

)as private_file:

pickle.dump(private_key, private_file)

@staticmethod

defload_obj_from_local

(path)

:"""從本地檔案載入物件"""

with

open

(path,

"rb"

)as f:

# 從檔案中讀取物件

obj = pickle.load(f)

# 將物件返回

return obj

defload_public_key

(self, public_key=

"public.key"):

"""載入公鑰"""

self.public_key = self.load_obj_from_local(public_key)

return self.public_key

defload_private_key

(self, private_key=

"private.key"):

"""載入私鑰"""

self.private_key = self.load_obj_from_local(private_key)

return self.private_key

defload_keys

(self, public_key=

"public.key"

, private_key=

"private.key"):

"""讀取公鑰和私鑰, 並返回"""

self.load_public_key(public_key)

self.load_private_key(private_key)

return self.public_key, self.private_key

defrsa_encrypt

(self, message_str, code=

'utf-8'):

""" 對傳入的str字串加密

:param message_str: 需要加密的字串

:param code: 字串的編碼型別

:return: 返回加密的位元組

"""# 從本地讀取公鑰

public_key = self.load_public_key(

)# 轉成bytes

content_bytes = message_str.encode(code)

print

(code, content_bytes,

"編碼後的位元組長度:{}"

.format

(len

(content_bytes)))

# 使用公鑰加密

encrypt_content = rsa.encrypt(content_bytes, public_key)

print

("加密後的內容:"

, encrypt_content)

print

("加密後的位元組數是:{}"

.format

(len

(encrypt_content)))

# 返回加密後的位元組

return encrypt_content

defrsa_decrypt

(self, encrypt_bytes, code=

'utf-8'):

""" 使用私鑰對加密的bytes進行解密

:param encrypt_bytes: 加密的內容,bytes型別

:param code: 字串的解碼型別

:return: 解密後的字串

"""# 從本地讀取私鑰

private_key = self.load_private_key(

)# 使用私鑰進行解密

content_bytes = rsa.decrypt(encrypt_bytes, private_key)

# utf-8編碼

decrypt_content = content_bytes.decode(code)

print

("解密後的內容:"

, decrypt_content)

# 返回解密後的字串

return decrypt_content

if __name__ ==

'__main__'

:# 生成公鑰和私鑰本地, 並初始化rsa物件

rsa_instance = rsaobj(

)while

true

:# 終端輸入

input_str =

input

("請輸入需要加密的內容:"

)# 當輸入是『exit』時,退出程式

if input_str ==

"exit"

: exit(

)# rsa加密

encrypt_content = rsa_instance.rsa_encrypt(input_str)

# rsa解密

生成RSA金鑰對

著名的rsa演算法,它通常是先生成一對rsa 金鑰,其中之一是保密金鑰,由使用者儲存 另乙個為公開金鑰,可對外公開,甚至可在網路伺服器中註冊。為提高保密強度,rsa金鑰至少為500位長,一般推薦使用1024位。這就使加密的計算量很大。rsa加密演算法的用處非常廣,比如支付寶的公開api與商戶對接使用...

RSA金鑰生成與使用

rsa金鑰生成與使用 1.開啟openssl金鑰生成軟體 開啟 openssl 資料夾下的 bin 資料夾,執行 openssl.exe 檔案,如下圖 2.生成rsa私鑰 輸入 genrsa out rsa private key.pem 1024 命令,回車後,在當前 bin 檔案目 錄中會新增乙...

關於RSA金鑰生成方法

隨機金鑰生成 隨機生成金鑰 protected static map initkey throws exception 根據資訊生成 固定金鑰 因為在初始化keypairgen時候,需要傳入乙個隨機數,如果不傳底層應該預設了隨機,如果有第二個引數應該根據這個引數生成金鑰!只是猜測,但是如果第二個引數...