基于python3.5的 rsa+base64加解密

python3.5.3的版本。需要先生成一个私钥,然后放入这里面即可。

这个有个地方需要注意的是:

  1. 加密阶段,我们base64 第一次加密的时候,是加密传入的字符串,然后rsa继续把base64加密后的数据再次加密 , 等rsa加密完成后,我们base64进行第二次加密,此刻加密的数据是加密 rsa加密后的数据了。
  2. 解密阶段。一路狂解密,不要停

一定要注意上面的加密阶段,别等第一个base64加密后,第二个base64就解密了,这样是行不通的。

#!/usr/bin/env python3
import rsa
import base64
import json
message2=b""
privatePath = "/root/PycharmProjects/xxxxx/pem/rsa_private_key.pem"
def decryption(data):
        ‘‘‘
        decryption the data
        :return:
        ‘‘‘
        mes=base64.b64decode(data)   # base64第一次解密
        print(‘mes -->‘,mes,len(mes))
        message2=b""
        with open(privatePath) as privatefile:
            p = privatefile.read()
            privkey = rsa.PrivateKey.load_pkcs1(p)

        for i in range(0,len(mes),128):
            data = i+128
            kk=mes[i:data]
            message = rsa.decrypt(kk, privkey)   # rsa解密
            message2 = message2 + message
        data =  base64.b64decode(message2)  # base64 解密 ras解密后的数据
        return data

def encryption(data):
        ‘‘‘
        encryption the data
        :param data:
        :return:
        ‘‘‘
        print("raw data -->",data)
        mes=base64.b64encode(data.encode(‘utf-8‘))  # base64第一次加密
        print("after base64 en",mes)

        mm = base64.b64decode(mes)
        print("after base64 de",mm)
        message2=b""
        with open(privatePath) as privatefile:
            p = privatefile.read()
            privkey = rsa.PrivateKey.load_pkcs1(p)
        for i in range(0,len(mes),128):
            data = i+128
            kk=mes[i:data]
            message = rsa.encrypt(kk, privkey)  # rsa加密
            message2 = message2 + message
        print("after en message2 -->",message2)
        data = base64.b64encode(message2)   # base54 第二次加密 rsa加密的结果

        return data

rawdata = "key=test,author=liaojiafa,date=20181017"
x = encryption(rawdata)
print("x",x)
d = decryption(x)
print("d",d)

原文地址:https://www.cnblogs.com/liaojiafa/p/9886321.html

时间: 2024-11-04 22:55:26

基于python3.5的 rsa+base64加解密的相关文章

php rsa 非对称加解密类

<?php header("Content-Type: text/html;charset=utf-8"); /* 生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令: openssl genrsa -out rsa_private_key.pem 1024 #生成原始 RSA私钥文件 rsa_private_key.pem opens

Java基础加密之BASE64加解密

BASE64加解密,加密与解密实际是指编码(encode)和解码(decode)的过程,其变换是非常简单的,仅仅能够避免信息被直接识别. Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式. Base64使用A--Z,a--z,0--9,+,/ 这64个字符. Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的ASCII字符序列 Base64编码表 Value Encoding  Value Encoding  Value Encodin

RSA 非对称加解密 公私钥的生成

加密和签名使用不同的密钥对,签名密钥对的私钥用于签名,其对应的公钥用于验证签名. 加密密钥对的公钥用于加密,其对应的私钥用于解密. 1.生成密钥对 /** * 生成RSA随机密钥对(公钥和私钥) * @return */ public static Map<String, String> createKeyPair() throws Exception { Map<String,String> keyPairMap = new HashMap<>(); // 密钥生成器

RSA 分段加解密【解决“不正确的长度”的异常】

方法1: RSA 是常用的非对称加密算法.最近使用时却出现了“不正确的长度”的异常,研究发现是由于待加密的数据超长所致. .NET Framework 中提供的 RSA 算法规定: 待加密的字节数不能超过密钥的长度值除以 8 再减去 11(即:RSACryptoServiceProvider.KeySize / 8 - 11),而加密后得到密文的字节数,正好是密钥的长度值除以 8(即:RSACryptoServiceProvider.KeySize / 8). 所以,如果要加密较长的数据,则可以

oracle里面base64加解密

1. base64 的解密函数select utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('dGVzdA=='))) from dual 2. base64 的加密函数select utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('test'))) from dual

java之BASE64加解密

1.简介 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到. 注:位于jdk的java.util包中. 2.代码 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.UnsupportedEncodingException; /** * Created by root on 16-6-2. */ publ

Base64加解密

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到.金融数据也常以base64编码格式提供. Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符.三个字节有24个比特,对应于

JavaScript Base64加解密

Base64加密算法是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的

Python AES - base64 加解密

首先python引用AES加密 from Crypto.Cipher import AES 需要先安装  Crypto  模块, 可以使用 easy_install 进行安装   会自动去官网进行搜索安装 其中代码示例: aes 加密 需要进行加密数据的处理,要求数据长度必须是16的倍数,不足时,在后边补0 class MyCrypt(): def __init__(self, key): self.key = key self.mode = AES.MODE_CBC def myencrypt