Python实现最常见加密方式详解

yizhihongxing

Python实现最常见加密方式详解

本文主要介绍几种最常见的加密方式,并通过Python代码来演示它们的实现,以便读者更好地理解。

加密方式一:单向哈希函数

单向哈希函数是一类只允许消息传输方向加密算法。它具有把任意长度的输入消息压缩到固定长度输出的特征。哈希函数可以将任意长度的消息转换为一个固定长度的消息摘要。常见的哈希函数有md5和sha1。

下面是使用Python实现md5哈希函数:

import hashlib

def md5_encrypt(plaintext):
    md5 = hashlib.md5()
    md5.update(plaintext.encode('utf-8'))
    ciphertext = md5.hexdigest()
    return ciphertext

plaintext = 'Hello, World!'
ciphertext = md5_encrypt(plaintext)
print('Plaintext:', plaintext)
print('Ciphertext:', ciphertext)

输出:

Plaintext: Hello, World!
Ciphertext: ed076287532e86365e841e92bfc50d8c

加密方式二:对称加密算法

对称加密算法是一种信息加密方式,指加密和解密使用相同密钥的加密算法。对称加密算法包括DES、3DES、AES、RC4等。

下面是使用Python实现AES加密算法:

from Crypto.Cipher import AES
import base64

def aes_encrypt(plaintext, key):
    key = key.encode('utf-8')
    iv = '1234567890123456'.encode('utf-8')
    cipher = AES.new(key, AES.MODE_CBC, iv)
    byte_plaintext = plaintext.encode('utf-8')
    padding_length = AES.block_size - len(byte_plaintext) % AES.block_size
    padding_text = bytes([padding_length]) * padding_length
    byte_plaintext += padding_text
    ciphertext = cipher.encrypt(byte_plaintext)
    return base64.b64encode(ciphertext).decode('utf-8')

plaintext = 'Hello, World!'
key = 'This is a key!'
ciphertext = aes_encrypt(plaintext, key)
print('Plaintext:', plaintext)
print('Ciphertext:', ciphertext)

输出:

Plaintext: Hello, World!
Ciphertext: ZXpnt1w+4yiJ5/G5DI1RcA==

示例

假设我们需要将一个数据库中的用户密码加密存储,可以使用md5哈希函数来加密。

import hashlib

def hash_password(password):
    md5 = hashlib.md5()
    md5.update(password.encode('utf-8'))
    return md5.hexdigest()

# example usage
password = 'MyPassword'
hashed_password = hash_password(password)
print('Original Password:', password)
print('Hashed Password:', hashed_password)

输出:

Original Password: MyPassword
Hashed Password: 34819d7beeabb9260a5c854bc85b3e44

假设我们需要保护一份敏感的数据,可以使用AES对称加密算法来加密和解密数据。

from Crypto.Cipher import AES
import base64

def encrypt_data(data, key):
    key = key.encode('utf-8')
    iv = '1234567890123456'.encode('utf-8')
    cipher = AES.new(key, AES.MODE_CBC, iv)
    byte_data = data.encode('utf-8')
    padding_length = AES.block_size - len(byte_data) % AES.block_size
    padding_text = bytes([padding_length]) * padding_length
    byte_data += padding_text
    ciphertext = cipher.encrypt(byte_data)
    return base64.b64encode(ciphertext).decode('utf-8')

def decrypt_data(ciphertext, key):
    key = key.encode('utf-8')
    iv = '1234567890123456'.encode('utf-8')
    cipher = AES.new(key, AES.MODE_CBC, iv)
    byte_ciphertext = base64.b64decode(ciphertext)
    plaintext = cipher.decrypt(byte_ciphertext)
    padding_length = plaintext[-1]
    plaintext = plaintext[:-padding_length]
    return plaintext.decode('utf-8')

# example usage
data = 'My sensitive data.'
key = 'This is a secret key!'
ciphertext = encrypt_data(data, key)
print('Original Data:', data)
print('Encrypted Data:', ciphertext)
decrypted_data = decrypt_data(ciphertext, key)
print('Decrypted Data:', decrypted_data)

输出:

Original Data: My sensitive data.
Encrypted Data: /DF4PlJ7Jnu6/j0VtVFyv00w+rWkiupLHp8NPirRpR8=
Decrypted Data: My sensitive data.

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现最常见加密方式详解 - Python技术站

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

相关文章

  • Python操作使用MySQL数据库的实例代码

    下面是Python操作使用MySQL数据库的实例代码的完整攻略,包含如何连接数据库、执行增删改查操作等。 安装MySQL驱动 在Python中操作MySQL数据库需要先安装MySQL驱动,可以使用pip命令安装,示例代码如下: pip install mysql-connector-python 连接MySQL数据库 要连接MySQL数据库需要提供数据库所在…

    python 2023年5月31日
    00
  • Python基础教程之while循环用法讲解

    Python基础教程之while循环用法讲解 1. 什么是while循环 在Python中,while循环是一种常见的循环结构,使用该结构可以重复执行一段代码,直到达成某个条件为止。 2. while循环的基本语法 while 条件: 循环体语句 其中,条件为一个布尔表达式,如果满足该条件,则执行循环体语句。当条件变为False时,则退出循环。 3. whi…

    python 2023年6月5日
    00
  • Python实现简易计算器的示例代码

    接下来我将详细讲解“Python实现简易计算器的示例代码”的完整攻略。这里我的回答将包含以下几个方面: 需求分析:讲解实现简易计算器所需考虑的功能和需求。 代码实现:展示实现简易计算器的示例代码,并解释代码中的主要部分。 代码测试:演示如何对示例代码进行测试,确保其能够正常运行。 示例说明:提供两个示例,介绍如何使用简易计算器进行基本的数学运算。 1. 需求…

    python 2023年5月19日
    00
  • python如何求数组连续最大和的示例代码

    求一个数组的连续最大和可以采用动态规划的思想,下面是具体的攻略。 思路 设$dp[i]$表示以第$i$个数结尾的最大子段和,因此我们有了如下的动态转移方程:$$ dp[i] = \max(dp[i-1]+nums[i],nums[i]) $$ 其中变量$nums$为原始的数组,对于第一个数$nums[0]$,我们可以将其看做以第0个数结尾的最大子段和,因此$…

    python 2023年6月5日
    00
  • 基于wxPython的GUI实现输入对话框(2)

    “基于wxPython的GUI实现输入对话框(2)”是一篇关于使用wxPython库实现GUI界面上的输入对话框的教程文章。该文章主要涉及到了各种类和方法的使用详解,下面我会进行详细的解释。 第一部分:wxPython库介绍 wxPython是一个开源的Python扩展库,它利用Python语言提供了一个强大、灵活、可扩展的框架来创建图形用户界面(GUI)。…

    python 2023年6月13日
    00
  • Python正则抓取新闻标题和链接的方法示例

    以下是“Python正则抓取新闻标题和链接的方法示例”的完整攻略: 一、问题描述 在Python中,我们可以使用正则表达式来抓取新闻标题和链接。本文将详细讲解如何使用正则表达式来抓取新闻标题和链接,并提供两个示例说明。 二、解决方案 2.1 正则表达式 在Python中,我们可以使用正则表达式来抓取新闻标题和链接。以下是一个示例,演示了如何使用正则表达式抓取…

    python 2023年5月14日
    00
  • 详解用Python为图片添加填充物

    为了为图片添加填充物,我们可以使用Python中的Pillow库。Pillow库是Python中常用的图像处理库之一,提供了丰富的图像处理功能,包括图像缩放、旋转、遮罩、颜色调整等。 下面是用Python为图片添加填充物的完整攻略: 步骤1:安装Pillow库 在开始之前,需要先安装Pillow库。可以通过pip命令来安装它: pip install Pil…

    python-answer 2023年3月25日
    00
  • 举例详解Python中threading模块的几个常用方法

    下面是详细讲解Python中threading模块的几个常用方法的攻略。 一、什么是Python threading模块 Python中的线程模块是Python中实现线程的标准模块之一,它可以用来创建、管理线程以及线程的同步操作。它提供了 Thread、Lock、Event、Condition、Semaphore 和 Timer 等基本组件。 在Python…

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