Python 加密与解密小结

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基础第三方模块requests openpyxl

    Python基础第三方模块requests和openpyxl requests模块 requests是Python中用于简化HTTP请求的常用库,支持HTTP/1.1和HTTPS,并且具有动态属性表现形式,可以方便地处理GET、POST等HTTP请求。 安装方法 使用pip install requests指令即可完成requests的安装。 request…

    python 2023年5月13日
    00
  • python 比较2张图片的相似度的方法示例

    Python中可以使用OpenCV库对图片进行处理和比较。OpenCV提供了两种常用的图片相似度比较方法:均方误差(MSE)和结构相似性指标(SSIM)。 1. 均方误差(MSE)方法 均方误差是一种测量两个信号间差异程度的方法。对于图像相似度比较,均方误差是指两幅图像所有像素点的对应差值的平方和的平均值。 使用Python中的OpenCV库实现MSE方法相…

    python 2023年5月18日
    00
  • python使用递归解决全排列数字示例

    下面是关于“Python使用递归解决全排列数字示例”的完整攻略。 1. 什么是递归? 递归是一种算法,可以化解问题为较小的、相同的问题。递归函数是一种特殊的函数,可以直接或间接地调用自身。递归函数需要有两个关键点:递归结束条件和递归调用。 2. 全排列问题 全排列问题是指对一组数进行排序,使得它们的顺序不同标记为一个不同的排列。例如,对于a, b, c这组数…

    python 2023年6月3日
    00
  • Python+Matplotlib+LaTeX玩转数学公式

    当我们在撰写论文或者交流学术内容时,鲜有人能够通过常规的键盘输入达到数学公式的效果,而手写数学符号则又过于繁琐。因此,我们需要使用到LaTeX系统,它能够非常方便地排版各式各样的数学公式。 而在使用LaTex排版数学公式的同时,若搭配Python和Matplotlib,将数学公式直观地图像化就成为了可行的选择。 以下是Python+Matplotlib+La…

    python 2023年6月3日
    00
  • python实现简单聊天功能

    下面是关于如何使用Python实现简单聊天功能的完整攻略。 1. 确定聊天方式 首先,要确定聊天方式。有多种方式可以实现聊天功能,例如: 基于网络的聊天室,可以使用socket库来实现。 基于命令行的聊天,可以使用标准输入输出和多线程来实现。 基于图形化界面的聊天软件,可以使用PyQt或Tkinter等GUI库来实现。 在这里,我们将使用基于命令行的方式来实…

    python 2023年5月19日
    00
  • shell脚本中执行python脚本并接收其返回值的例子

    Shell脚本中执行Python脚本并接收其返回值的例子 在Shell脚本中,我们可以通过$(命令)或者反引号命令的方式来执行指定命令,并将其返回值赋值给变量。因此,如果我们要在Shell脚本中执行Python脚本,并接收Python脚本的返回值,可以使用这种方式来实现。 示例说明 假设我们有一个Python脚本test.py,内容如下: #!/usr/bi…

    python 2023年6月3日
    00
  • Python轻松写个课堂随机点名系统

    下面是详细的“Python轻松写个课堂随机点名系统”攻略: 1. 确定目的和需求 在编写程序之前,我们需要明确系统的目的和需求。点名系统的目的是随机选取课堂中的学生进行点名,方便老师进行点名操作。系统需求包括: 存储学生名单 随机选取学生 统计已点名人数 显示已点名学生名单 2. 准备工作 在编写程序之前,我们需要准备好开发环境和所需材料。开发环境可以选择A…

    python 2023年6月3日
    00
  • 用Python实现艺术绘画,人生苦短,代码赛高

    用Python实现艺术绘画 艺术绘画是一个创造性的过程,包括绘画、素描和绘画。借助Python编程语言,您可以模拟艺术绘画的过程。该过程包括以下步骤:1.导入所需的库-您需要导入NumPy、OpenCV和Matplotlib等库来执行图像处理任务。2.加载图像-您可以使用OpenCV加载图像。3.应用过滤器和效果-您可以使用NumPy和OpenCV应用过滤器…

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