# 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時候,需要傳入乙個隨機數,如果不傳底層應該預設了隨機,如果有第二個引數應該根據這個引數生成金鑰!只是猜測,但是如果第二個引數...