python rsa_Python中使用RSA算法

# -*- coding: utf-8 -*-

# Author: areful

import base64

from Crypto import Random

from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5

from Crypto.PublicKey import RSA

class RSACipher(object):

_private_pem = None

_public_pem = None

def __init__(self):

_random_generator = Random.new().read

_rsa = RSA.generate(1024, _random_generator)

self._private_pem = _rsa.exportKey()

self._public_pem = _rsa.publickey().exportKey()

def get_public_key(self):

return self._public_pem

def get_private_key(self):

return self._private_pem

# def load_keys(self):

# with open('master-public.pem', "r") as f:

# self._public_pem = f.read()

# with open('master-private.pem', "r") as f:

# self._private_pem = f.read()

#

# def save_keys(self):

# with open('master-public.pem', 'wb') as f:

# f.write(self._public_pem)

# with open('master-private.pem', 'wb') as f:

# f.write(self._private_pem)

def decrypt_with_private_key(self, _cipher_text):

_rsa_key = RSA.importKey(self._private_pem)

_cipher = Cipher_pkcs1_v1_5.new(_rsa_key)

_text = _cipher.decrypt(base64.b64decode(_cipher_text), "ERROR")

return _text.decode(encoding="utf-8")

def encrypt_with_public_key(self, _text):

_rsa_key = RSA.importKey(self._public_pem)

_cipher = Cipher_pkcs1_v1_5.new(_rsa_key)

_cipher_text = base64.b64encode(_cipher.encrypt(_text.encode(encoding="utf-8")))

return _cipher_text

# encrypt with private key & decrypt with public key is not allowed in Python

# although it is allowed in RSA

def encrypt_with_private_key(self, _text):

_rsa_key = RSA.importKey(self._private_pem)

_cipher = Cipher_pkcs1_v1_5.new(_rsa_key)

_cipher_text = base64.b64encode(_cipher.encrypt(_text.encode(encoding="utf-8")))

return _cipher_text

def decrypt_with_public_key(self, _cipher_text):

_rsa_key = RSA.importKey(self._public_pem)

_cipher = Cipher_pkcs1_v1_5.new(_rsa_key)

_text = _cipher.decrypt(base64.b64decode(_cipher_text), "ERROR")

return _text.decode(encoding="utf-8")

if __name__ == "__main__":

cipher = RSACipher()

# cipher.save_keys()

# cipher.load_keys()

text = 'Encrypt with public key, and decrypt with private key'

# 公钥加密

cipherText = cipher.encrypt_with_public_key(text)

print(cipherText)

# 私钥解密

plainText = cipher.decrypt_with_private_key(cipherText)

print(plainText)

# # RSA算法本身允许私钥加密公钥解密,实际python不允许

# # raise TypeError("No private key")

# cipherText = cipher.encrypt_with_private_key(text)

# plainText = cipher.decrypt_with_public_key(cipherText)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值