如何在Python中进行加密和解密?

在Python中进行加密和解密可以通过加密算法实现,本次攻略中将介绍两种加密算法:AES和RSA。

AES加密和解密

安装依赖库

在Python中进行AES加密和解密需要使用Crypto库,可以通过以下命令安装:

pip install pycrypto

导入库

在Python代码中引入相关依赖库:

from Crypto.Cipher import AES
import base64
import os

加密函数

def aes_encrypt(key, text):
    '''
    AES加密函数
    :param key: 密钥
    :param text: 待加密文本
    :return: base64编码后的密文
    '''
    iv = os.urandom(16)  # 生成16位随机向量
    key = bytes(key, encoding='utf-8')
    cipher = AES.new(key, AES.MODE_CBC, iv)
    pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
    # 先进行填充
    encrypted_text = cipher.encrypt(pad(text))
    # 将加密后的密文和向量使用base64编码后返回
    return base64.b64encode(encrypted_text + iv).decode()


解密函数

def aes_decrypt(key, text):
    '''
    AES解密函数
    :param key: 密钥
    :param text: 待解密密文
    :return: 解密后的文本
    '''
    # 先进行base64解码
    text = base64.b64decode(text.encode())
    iv = text[-16:]  # 先取出向量
    key = bytes(key, encoding='utf-8')
    cipher = AES.new(key, AES.MODE_CBC, iv)
    # 进行解密并去掉填充的字符
    return cipher.decrypt(text[:-16]).decode().rstrip('\0')

示例

key = "this_is_a_secret_key" # 密钥
text = "hello world" # 待加密文本

# 进行加密
encrypted_text = aes_encrypt(key, text)
print('加密后的密文:', encrypted_text)

# 进行解密
decrypted_text = aes_decrypt(key, encrypted_text)
print('解密后的文本:', decrypted_text)

RSA加密和解密

安装依赖库

在Python中进行RSA加密和解密需要使用Crypto库,可以通过以下命令安装:

pip install pycrypto

导入库

在Python代码中引入相关依赖库:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64

密钥生成函数

def generate_key():
    '''
    RSA密钥生成函数,生成1024位密钥对
    :return: 公钥和私钥
    '''
    key = RSA.generate(1024)
    private_key = key.export_key()
    public_key = key.publickey().export_key()
    return public_key, private_key

加密函数

def rsa_encrypt(public_key, text):
    '''
    RSA加密函数
    :param public_key: 公钥
    :param text: 待加密文本
    :return: base64编码后的密文
    '''
    rsa_key = RSA.import_key(public_key)
    cipher = PKCS1_v1_5.new(rsa_key)
    # 进行加密并返回base64编码的密文
    return base64.b64encode(cipher.encrypt(text.encode())).decode()


解密函数

def rsa_decrypt(private_key, text):
    '''
    RSA解密函数
    :param private_key: 私钥
    :param text: 待解密密文
    :return: 解密后的文本
    '''
    rsa_key = RSA.import_key(private_key)
    cipher = PKCS1_v1_5.new(rsa_key)
    # 先进行base64解码
    text = base64.b64decode(text.encode())
    # 进行解密并返回解密后的文本
    return cipher.decrypt(text, None).decode()

示例

# 生成密钥对
public_key, private_key = generate_key()
print('公钥:', public_key)
print('私钥:', private_key)

text = "hello world"
# 进行加密
encrypted_text = rsa_encrypt(public_key, text)
print('加密后的密文:', encrypted_text)

# 进行解密
decrypted_text = rsa_decrypt(private_key, encrypted_text)
print('解密后的文本:', decrypted_text)

以上就是在Python中进行加密和解密的完整攻略,演示了两个例子:AES和RSA加密解密的示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何在Python中进行加密和解密? - Python技术站

(0)
上一篇 2023年4月19日
下一篇 2023年4月19日

相关文章

  • Python 3.x对.CSV数据按任意行、列读取的过程

    下面是详细讲解“Python 3.x对.CSV数据按任意行、列读取的过程”的完整攻略。 1. 读取CSV文件 在Python中,可以使用csv模块来读取CSV文件。使用csv模块,我们需要先导入它: import csv 接着,我们可以通过csv.reader函数来读取CSV文件并转换成列表形式。例如,我们要读取名为example.csv的文件,代码如下: …

    python 2023年6月3日
    00
  • Python实现将xml导入至excel

    下面是Python实现将xml导入至excel的完整实例教程,步骤包括: 一、安装第三方库我们需要使用两个第三方库:pandas、xml.etree.ElementTree。pandas是Python的数据分析库,可以将数据格式化输出到Excel表格中;xml.etree.ElementTree是Python的标准库,可以解析和导入xml文件。如果您还没有安…

    python 2023年5月13日
    00
  • 在Python中利用Into包整洁地进行数据迁移的教程

    当然,我很乐意为您提供“在Python中利用Intake包整洁地进行数据迁移的教程”的完整攻略。以下是详细步骤和示例。 Intake包的概述 Intake是一个Python包,用于管理和加载数据集。它提供了一个统一的接口,可以轻松地加载各种数据源,包括本地文件、远程文件、数据库和API。Intake还提供了一种简单的方法来定义数据集的元数据,包括数据集名称、…

    python 2023年5月13日
    00
  • Python实现获取汉字偏旁部首的方法示例【测试可用】

    获取汉字偏旁部首是中文文本处理中的一个重要问题。本攻略将介绍Python实现获取汉字偏旁部首的方法,包括基于Unicode编码和基于康熙字典的方法。 基于Unicode编码的方法 Unicode编码为每个汉字分配了一个唯一的代码点,可以使用Python内置的ord函数获取汉字的Unicode编码。汉字的偏旁部首通常位于Unicode编码的高位,可以通过位运算…

    python 2023年5月15日
    00
  • python OpenCV GrabCut使用实例解析

    我很乐意为您提供 OpenCV GrabCut 的使用实例解析攻略,内容如下。 目录 GrabCut 简介 GrabCut 使用实例 人物图像背景去除 物体图像背景去除 GrabCut 简介 GrabCut 是 OpenCV 的一种图像分割算法,可以自动地、交互地分割前景和背景。在图像分割的过程中,传统的全自动方法在复杂背景的图像中的精度较低。交互方法需要用…

    python 2023年5月18日
    00
  • python元组的可变与不可变问题

    Python元组的可变与不可变问题 介绍 Python中有多种基本数据类型,其中之一就是元组(Tuple)。元组是一个不可变的序列,和列表类似,但元组的元素不可修改。因此有时会产生对元组可变性的疑惑。 下面我们将详细讨论Python元组的可变性问题,并且通过示例来演示元组的可变性。 Python元组的不可变性 元组是Python的不可变序列类型,不可改变的意…

    python 2023年5月14日
    00
  • Python – 在字符串中查找数字

    【问题标题】:Python – find digits in a stringPython – 在字符串中查找数字 【发布时间】:2023-04-06 13:52:01 【问题描述】: def get_digits(str1): c = “” for i in str1: if i.isdigit(): c += i return c 上面是我使用的代码,问…

    Python开发 2023年4月7日
    00
  • Python绘制正二十面体图形示例

    下面是“Python绘制正二十面体图形示例”的完整攻略。 步骤一:安装必要的库 首先,需要安装必要的库:numpy 和 matplotlib。 你可以通过命令行执行以下命令进行安装: pip install numpy pip install matplotlib 步骤二:绘制一个正二十面体的三维坐标点 我们可以通过计算出正二十面体的顶点坐标,然后将这些坐标…

    python 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部