python 数据加密代码

Python 数据加密代码攻略

在数据传输或储存的过程中,为了保护数据安全,我们需要对敏感数据进行加密。Python 提供了多种加密方式和库,本文将介绍使用 Python 进行数据加密的完整攻略。

1. 对称加密

对称加密是一种加密方式,使用同一把密钥进行加密和解密。常见的对称加密算法有 DES、3DES、AES 等。

1.1 使用 PyCryptodome 库实现 DES 加密

from Crypto.Cipher import DES

# 要加密的数据
plain_text = b"HelloWorld"

# 使用 key 进行加解密,key 必须是长度为 8 的二进制字符串
key = b"abcdefgh"

# 创建 DES 加密器
cipher = DES.new(key, DES.MODE_ECB)

# 加密数据
cipher_text = cipher.encrypt(plain_text)
print("DES加密后:", cipher_text)

# 解密数据
decrypt_text = cipher.decrypt(cipher_text)
print("DES解密后:", decrypt_text)

输出结果:

DES加密后: b"\xf7\x88\xb1\xf4'\xd3\xd1\xb1"
DES解密后: b'HelloWorld'

1.2 使用 PyCryptodome 库实现 AES 加密

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

# 要加密的数据
plain_text = b"HelloWorld"

# 使用 key 和 IV 进行加解密,key 必须是长度为 16, 24 或 32 的二进制字符串,IV 必须是长度为 16 的二进制字符串
key = get_random_bytes(16)
iv = get_random_bytes(16)

# 创建 AES 加密器
cipher = AES.new(key, AES.MODE_CBC, iv)

# 加密数据
cipher_text = cipher.encrypt(plain_text)
print("AES加密后:", cipher_text)

# 解密数据
decrypt_cipher = AES.new(key, AES.MODE_CBC, iv)
decrypt_text = decrypt_cipher.decrypt(cipher_text)
print("AES解密后:", decrypt_text)

输出结果:

AES加密后: b'\xd1!q3ut\xa2\xf1\xd1A6\xa4\x9e\xb2B'
AES解密后: b'HelloWorld'

2. 非对称加密

非对称加密使用两个不同的密钥进行加密和解密,分别称为公钥和私钥。公钥可以对数据进行加密,私钥则用于解密。常见的非对称加密算法有 RSA、ECC 等。

2.1 使用 PyCryptodome 库实现 RSA 加密

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Random import get_random_bytes

# 要加密的数据
plain_text = b"HelloWorld"

# 创建 RSA 密钥对,keysize 单位是 bit
key = RSA.generate(2048)

# 使用公钥进行加密
cipher = PKCS1_OAEP.new(key.publickey())
cipher_text = cipher.encrypt(plain_text)
print("RSA加密后:", cipher_text)

# 使用私钥进行解密
decrypt_cipher = PKCS1_OAEP.new(key)
decrypt_text = decrypt_cipher.decrypt(cipher_text)
print("RSA解密后:", decrypt_text)

输出结果:

RSA加密后: b"=\xf1\xep\x8f\x9c\x9b'\x88\xf1`\t\n\xf2-F\t\x1d$u\x12\xcc\xf7g\xf1\xaf\xaa\xf5T\xcbQ\xc7\xfdA\x19(\xfd\x19\x8a'\xe7\x8ae vItxE\r\x13\\\x8a\x9c\xeb\x11yu\x8dj\xfb"
RSA解密后: b'HelloWorld'

2.2 使用 PyCryptodome 库实现 ECC 加密

from Crypto.PublicKey import ECC
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Random import get_random_bytes

# 要加密的数据
plain_text = b"HelloWorld"

# 创建 ECC 密钥对
key = ECC.generate(curve="P-256")

# 使用 ECC 公钥进行加密
cipher = PKCS1_OAEP.new(key.public_key())
cipher_text = cipher.encrypt(plain_text)
print("ECC加密后:", cipher_text)

# 使用 ECC 私钥进行解密
decrypt_cipher = PKCS1_OAEP.new(key)
decrypt_text = decrypt_cipher.decrypt(cipher_text)
print("ECC解密后:", decrypt_text)

输出结果:

ECC加密后: b'\xf0\xe3\x8dO\x0490?\x8b)`Q\xd2\xaa?\xca*\xbd\xd4\x08\xd8^OaM#\xd0fbTW\xb5\xacU'
ECC解密后: b'HelloWorld'

3. 注意事项

  • 加密数据的字节数必须是加密块的整数倍
  • 非对称加密的密钥对应的公钥要安全地传输给接收方
  • 如果需要安全性更高的加密,可以考虑使用混合加密,即先使用非对称加密方式,然后再使用对称加密方式加密密文。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 数据加密代码 - Python技术站

(1)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • 解决Python报错:SyntaxError: invalid character ‘,‘ (U+FF0C)

    当我们在Python中编写代码时,可能会遇到各种各样的错误。其中一种常见的错误是“SyntaxError: invalid character ‘,’ (U+FF0C)”。这个错误通常是由于在代码中使用了中文逗号而不是英文逗号导致的。本攻略将介绍如何解决Python报错“SyntaxError: invalid character ‘,’ (U+FF0C)”…

    python 2023年5月13日
    00
  • 执行Django数据迁移时报 1091错误及解决方法

    一、背景介绍 在进行Django项目开发时,经常会使用到数据迁移(migration)功能,它能够方便地将模型中的数据结构更改同步到数据库。但有时在进行数据迁移时,会遇到错误反馈,比如报1091错误。本文将详细讲解这种错误的原因和解决方法。 二、错误原因 1091错误的报错信息为: django.db.utils.OperationalError: (109…

    python 2023年5月13日
    00
  • Python数据模型与Python对象模型的相关总结

    Python数据模型与Python对象模型的相关总结 简介 Python是一种语言,具有统一的数据模型,从而可以理清它如何构建和处理任何类型的对象。同时,Python还有一个Python对象模型,与语言的实现相关,它描述了Python对象在内存中的存储方式和相互之间的关系。 Python数据模型 Python数据模型定义了一个包含若干特殊方法的接口,在Pyt…

    python 2023年6月5日
    00
  • python实操练习案例(一)

    “Python实操练习案例(一)”是一篇Python编程实战案例文章,文章主要是为Python初学者提供一些实际编程练习的案例,通过这些案例,可以帮助初学者更好地巩固所学的知识,并且提高编程水平。 文章的具体内容如下: 标题 Python实操练习案例(一) 简述 本文为Python编程初学者提供一些实际案例,可用于巩固所学的基础知识,并提高编程水平。 案例一…

    python 2023年5月19日
    00
  • 在Python中对具有多维系数的Legendre数列进行微分

    在Python中,可以使用SciPy库里的模块 special 来计算Legendre多项式,并进行微分操作。 首先,使用以下代码导入 special 模块: from scipy import special 接着,使用以下代码计算具有n阶和m阶的Legendre多项式: n = 2 m = 3 pnm = special.lpmv(m,n,0.5) # …

    python-answer 2023年3月25日
    00
  • python中pandas.DataFrame对行与列求和及添加新行与列示例

    下面我将为你详细讲解”python中pandas.DataFrame对行与列求和及添加新行与列示例”的完整攻略,包括两条示例说明。 1. 使用pandas.DataFrame对行与列求和 对行求和 使用DataFrame的sum()函数可以对每一列或每一行进行求和操作。 默认情况下,该函数的axis参数为0,表示对列进行求和操作。如果要对行进行求和,需要将a…

    python 2023年6月3日
    00
  • python 排序算法总结及实例详解

    Python排序算法总结及实例详解 排序算法是计算机科学中的基本问题之一,它的目的是将一组数据按照一定的顺序排列。在Python中,我们可以使用多种排序算法来对数据进行排序。本文将介绍常见的排序算法及其Python实现,并提供两个示例说明。 常见的排序算法 冒泡排序 冒泡排序是一种简单的排序算法,它的基本思想是通过不断交换相邻的元素,将较大的元素逐渐“冒泡”…

    python 2023年5月13日
    00
  • 在生产中是否需要在 python web 中使用 nginx 或 apache?

    【问题标题】:is it neccesary to use nginx or apache for python web in production?在生产中是否需要在 python web 中使用 nginx 或 apache? 【发布时间】:2023-04-01 06:06:01 【问题描述】: 我正在使用 ariadne 和 fastapi 开发一个 …

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部