python加解密算法

#-- encoding: gb2312 --
import threading
import Queue
import urllib2
import requests

import os, string, shutil,re
import pefile
import win32api

import hashlib
import os
from Crypto.Cipher import AES
import base64
from binascii import b2a_hex, a2b_hex
from Crypto import Random
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.PublicKey import RSA

class Encrypts:
“”“MD5 base64 AES RSA 四种加密方法”""
def init(self):
self.aes_mode = AES.MODE_ECB # AES加密模式
self.aes_key_size = 256 # AES秘钥,随机数值
self.rsa_count = 2048 # RSA秘钥对,随机数值

def md5_encrypt(plaintext):
    """ MD5加密
    :param plaintext: 需要加密的内容
    :return: encrypt_str密文
    """
    h1 = hashlib.md5()                              # 创建md5对象
    h1.update(plaintext.encode(encoding='utf-8'))   # 必须声明encode
    # 加密
    encrypt_str = h1.hexdigest()
    return encrypt_str

def base64_encry(plaintext):
    """base64加密"""
    base64_encry = base64.b64encode(plaintext.encode('utf-8'))
    return base64_encry


def generate_aes_key(self):
    """AES秘钥生成"""
    # length for urandom
    key_size = self.aes_key_size
    u_len = int(key_size/8/4*3)
    aes_key = base64.b64encode(os.urandom(u_len))    # os.urandom()生成随机字符串
    return aes_key

def aes_encrypt(self, message, aes_key):
    """use AES to encrypt message,
    :param message: 需要加密的内容
    :param aes_key: 密钥
    :return: encrypted_message密文
    """
    mode = self.aes_mode                        # 加密模式
    if type(message) == str:
        message = bytes(message, 'utf-8')
    if type(aes_key) == str:
        aes_key = bytes(aes_key, 'utf-8')
    # aes_key, message必须为16的倍数
    while len(aes_key) % 16 != 0:
        aes_key += b' '
    
    while len(message) % 16 != 0:
        message += b' '
    # 加密对象aes
    aes = AES.new(key=aes_key, mode=mode)
    encrypt_message = aes.encrypt(plaintext=message)
    return b2a_hex(encrypt_message)

def generate_rsa_keys(self):
    """RSA秘钥对生成"""
    rsa_count = self.rsa_count
    # 随机数生成器
    random_generator = Random.new().read
    # rsa算法生成实例
    rsa = RSA.generate(rsa_count, random_generator)
    # master的秘钥对的生成
    rsa_public_key = rsa.publickey().exportKey()
    rsa_private_key = rsa.exportKey()
    return rsa_public_key, rsa_private_key

def rsa_encrypt(self,message, rsa_public_key):
    """use RSA to encrypt message,
    :param message: 需要加密的内容
    :param rsa_public_key: 公钥(字节类型)
    :return: encrypt_msg_list密文列表
    """
    pub_key = RSA.importKey(rsa_public_key)
    # 加密对象
    cipher = Cipher_pkcs1_v1_5.new(pub_key)
    msg = message.encode('utf-8')
    # 分段加密
    default_encrypt_length = 245
    length = default_encrypt_length
    msg_list = [msg[i:i + length] for i in list(range(0, len(msg), length))]
    # 加密后信息列表
    encrypt_msg_list = []
    for msg_str in msg_list:
        cipher_text = base64.b64encode(cipher.encrypt(message=msg_str))
        encrypt_msg_list.append(cipher_text)
    return encrypt_msg_list

class Decrypts:
“”“base64 AES RSA 三种解密方法”""
def init(self):
# AES解密模式(须与加密模式一致)
self.aes_mode = AES.MODE_ECB

def base64_decry(ciphertext):
    """base64解密"""
    base64_decry = (base64.b64decode(ciphertext)).decode('utf-8')
    return base64_decry


def aes_decrypt(self, encrypt_message, aes_key):
    """ AES解密
    :param encrypt_message: 密文
    :param aes_key: 秘钥
    :return: decrypt_text解密后内容
    """
    aes_mode = self.aes_mode
    aes = AES.new(key=aes_key, mode=aes_mode)
    decrypted_text = aes.decrypt(a2b_hex(encrypt_message))
    decrypted_text = decrypted_text.rstrip()  # 去空格
    return decrypted_text.decode()

def rsa_decrypt(self,encrypt_msg_list, rsa_private_key):
    """ RSA解密
    :param encrypt_msg_list: 密文列表
    :param rsa_private_key: 私钥(字节类型)
    :return  解密后内容
    """
    random_generator = Random.new().read
    pri_key = RSA.importKey(rsa_private_key)
    cipher = Cipher_pkcs1_v1_5.new(pri_key)
    # 解密后信息列表
    msg_list = []
    for msg_str in encrypt_msg_list:
        #msg_str = base64.decodebytes(msg_str)
        msg_str =base64.b64decode(msg_str)
        de_str = cipher.decrypt(msg_str, random_generator)
        msg_list.append(de_str.decode('utf-8'))
    return ''.join(msg_list)

if name==“main”:
Keytest=Encrypts()
PbulicKey,PrivateKey=Keytest.generate_rsa_keys()
#print PbulicKey,PrivateKey

str1="aaaaabbbbbcccccccddddddd"
print "原数据是:%s\n" %str1
str2=Keytest.rsa_encrypt(str1,PbulicKey)
print "数据加密后是:%s\n" %str2


Unekytest=Decrypts()
str3=Unekytest.rsa_decrypt(str2,PrivateKey)
print "数据解密后是:" 
print str3

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值