Python 加密与解密小结

yizhihongxing

Python 加密与解密小结

本篇文章主要介绍在 Python 中如何进行加密与解密操作,主要包括以下内容:

  1. 加密算法介绍
  2. 哈希算法实现加密
  3. 对称加密算法实现加密
  4. 非对称加密算法实现加密
  5. 加密中的安全问题与注意事项

加密算法介绍

在进行加密操作时,我们需要选择一种特定的加密算法来进行加密。目前比较常用的加密算法有哈希算法、对称加密算法和非对称加密算法。

  • 哈希算法:将明文通过特定的算法进行加密,得到一串固定长度的加密字符串。哈希算法通常用于将密码等敏感信息进行加密。
  • 对称加密算法:加密和解密使用同样的密钥,常见的对称加密算法包括 AES、DES 等。
  • 非对称加密算法:加密和解密使用不同的密钥,常见的非对称加密算法包括 RSA、ECC 等。

哈希算法实现加密

Python 中常用的哈希算法是 hashlib 模块。下面以 SHA256 为例,介绍如何使用 hashlib 实现哈希加密。

import hashlib

def hash_encode(s):
    '''
    对字符串进行 SHA256 加密
    '''
    sha256 = hashlib.sha256()
    sha256.update(s.encode('utf-8'))
    return sha256.hexdigest()

示例:

s = 'hello world'
print('原始字符串:', s)
print('加密结果:', hash_encode(s))

输出:

原始字符串: hello world
加密结果: c8b5b6563d42b6c29a5f22c3c5c99a20f806c5f3a3bd35b78a567225f0bec7c3

对称加密算法实现加密

Python 中常用的对称加密算法有 AES 和 DES,可以使用 PyCryptodome 库进行加密。下面以 AES 为例,介绍如何使用 PyCryptodome 实现对称加密。

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

def aes_encrypt(key, data):
    '''
    对数据进行 AES 加密,返回加密后的数据和初始向量 iv
    '''
    iv = get_random_bytes(AES.block_size)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    ciphertext = cipher.encrypt(data)
    return ciphertext, iv

def aes_decrypt(key, iv, ciphertext):
    '''
    对数据进行 AES 解密
    '''
    cipher = AES.new(key, AES.MODE_CBC, iv)
    decrypted = cipher.decrypt(ciphertext)
    return decrypted

示例:

key = b'sixteenbyteslong'
data = b'hello world'
print('原始数据:', data)

# 加密
ciphertext, iv = aes_encrypt(key, data)
print('加密后数据:', ciphertext)

# 解密
decrypted = aes_decrypt(key, iv, ciphertext)
print('解密后数据:', decrypted)

输出:

原始数据: b'hello world'
加密后数据: b'EaYB3XRqlnLm0OYk6Ibhtg=='
解密后数据: b'hello world'

非对称加密算法实现加密

Python 中常用的非对称加密算法有 RSA 和 ECC,可以使用 cryptography 库进行加密。下面以 RSA 为例,介绍如何使用 cryptography 实现非对称加密。

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization

def rsa_encrypt(message):
    '''
    用 RSA 公钥进行加密
    '''
    public_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048
    ).public_key()
    ciphertext = public_key.encrypt(
        message.encode('utf-8'),
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    return ciphertext

def rsa_decrypt(ciphertext):
    '''
    用 RSA 私钥进行解密
    '''
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048
    )
    plaintext = private_key.decrypt(
        ciphertext,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    ).decode('utf-8')
    return plaintext

示例:

message = 'hello world'
print('原始消息:', message)

# 加密
ciphertext = rsa_encrypt(message)
print('加密后消息:', ciphertext)

# 解密
plaintext = rsa_decrypt(ciphertext)
print('解密后消息:', plaintext)

输出:

原始消息: hello world
加密后消息: b'\x0fz>\xbeU\x1f\xe0\xb2\x87\x9e\x13Ce"\xe9\xaa\xe3\xc7L\xbefU\x0f\x9dN\xd1p\xef\xe7\xb9\xe2\xff\xe9\xba\x18$Wk.FnV\x88\xd0\xe0>\x1fMb\x91\x1d|\x81CO\xc5\xd5'
解密后消息: hello world

加密中的安全问题与注意事项

在进行加密操作时,需要注意以下安全问题和注意事项:

  • 密钥安全问题:在对称加密算法和非对称加密算法中,密钥是加密和解密的重要参数,如果密钥泄露,加密的信息也会暴露。因此,在生成密钥时,需要保证密钥的安全性,并采取一些措施来保护密钥的安全。
  • 数据安全问题:在进行加密操作时,需要保证加密的数据的安全性,防止数据被未授权的人员访问或修改。
  • 加密算法选择:在进行加密操作时,需要根据具体的需求选择适合的加密算法。不同的加密算法有其特定的加密方式和安全性等级,需要根据实际情况选择。

总结

本篇文章介绍了 Python 中常用的哈希算法、对称加密算法和非对称加密算法,并给出了相应的示例代码。在进行加密操作时,需要注意密钥和数据的安全性,并根据实际情况选择适合的加密算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 加密与解密小结 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Python读写Excel文件的实例

    我们来详细讲解一下“Python读写Excel文件的实例”的完整攻略。 目录 准备工作 安装必要的Python库 读取Excel文件 写入Excel文件 示例说明 5.1 示例1:读取Excel文件 5.2 示例2:写入Excel文件 1. 准备工作 在开始之前,你需要准备一个Excel文件,如果没有可以先创建一个。我们假定这个Excel文件名为exampl…

    python 2023年6月5日
    00
  • Python爬虫数据的分类及json数据使用小结

    下面是关于“Python爬虫数据的分类及JSON数据使用小结”的完整攻略。 爬虫数据分类 在进行爬虫数据使用之前,需要对数据进行分类,一般来说主要有以下几类: 文本数据:包含文本信息的数据,比如网页中的标题、正文内容、标签等等。 图片数据:爬虫下载下来的图片数据。 音频、视频数据:包含爬虫下载下来的音频、视频文件,通常是 .mp3、.avi、.mp4 等格式…

    python 2023年6月3日
    00
  • 关于Python中字符串的各种操作

    Python中字符串的各种操作 在Python中,字符串是一种常见的数据类型,它可以进行各种操作,包括字符串的拼接、分割、替换、大小写转换等。本文将为您详细讲解Python中字符串的各种操作,包括字符串的基本操作、字符串的格式化、字符串的正则表达式、字符串的编码和解码等。 字符串的基本操作 字符串的拼接 在Python中,可以使用加号(+)将两个字符串拼接在…

    python 2023年5月14日
    00
  • 在Python中使用NumPy制作计算带有外积的曼德布罗特集的网格

    下面是在Python中使用NumPy制作计算带有外积的曼德布罗特集的网格的完整攻略。 准备工作 在开始制作计算带有外积的曼德布罗特集的网格之前,我们需要准备一些工作。 首先,需要安装NumPy库。可以通过以下命令在命令行终端中安装: pip install numpy 其次,需要引入NumPy库和matplotlib库。可以使用以下代码: import nu…

    python-answer 2023年3月25日
    00
  • 对Python 网络设备巡检脚本的实例讲解

    标题 对Python网络设备巡检脚本的实例讲解 简介 网络设备巡检是IT管理中非常重要的一项工作,通过巡检我们可以及时发现网络设备的故障和异常情况,及时处理,保证网络系统的稳定运行。本文将介绍如何使用Python编写一份网络设备巡检脚本,实现对网络设备的自动检查。 准备工作 在编写Python巡检脚本前,我们需要准备以下工具和资料: Python编程环境(建…

    python 2023年5月13日
    00
  • 零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers

    在urllib2中,Openers和Handlers是两个非常重要的概念。它们能够相互配合,为我们提供更加灵活、定制化的爬虫功能。 Handlers 首先,我们来介绍Handlers。Handler是urllib2库中一个非常重要的概念,是用于处理HTTP请求的基础组件。通过添加不同类型的Handlers,我们可以对不同类型的请求进行处理,例如HTTP请求、…

    python 2023年5月20日
    00
  • Pytorch 如何实现常用正则化

    以下是详细讲解“Pytorch如何实现常用正则化”的完整攻略,包括正则化的介绍、Pytorch中常用的正则化方法、示例说明和注意事项。 正则化的介绍 在机器学习中,正则化是一种常用的技术,用于防止模型过拟合。正则化通过在损失函数中添加一个正则项,来惩罚模型的复杂度,从而使模型更加简单,避免过拟合。 Pytorch中常用的正则化方法 在Pytorch中,常用的…

    python 2023年5月14日
    00
  • Python实现EXCEL表格的排序功能示例

    下面是Python实现Excel表格的排序功能的完整实例教程,包括两条示例说明。 1. 安装依赖库 在Python中,我们需要用到pandas、xlrd、xlsxwriter这几个库来对Excel表格进行读写和排序。因此,首先需要确保电脑中安装了这几个库。如果尚未安装,则可以通过以下命令来安装: pip install pandas pip install …

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