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

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用Tkinter做自己的中文代码编辑器

    下面我将详细讲解“python用Tkinter做自己的中文代码编辑器”的完整攻略。 一、Tkinter介绍 Tkinter是Python自带的GUI库,它提供了显示GUI界面所需要的各种组件。使用Tkinter编写代码的好处是它可以轻松跨平台运行,无需额外的安装。 二、制作自己的中文代码编辑器 制作一个自己的中文代码编辑器需要使用Tkinter的一些组件: …

    python 2023年5月19日
    00
  • 运行第一个Python程序

    Python作为解释型的编程语言,支持两种编程方式: 交互式编程 源文件编程 交互式编程 交互式编程指的是在命令行窗口打开python运行环境,在运行环境中输入代码,每输入一段代码运行一次程序,就好像跟计算机对话一样,所以称为交互式编程。 源文件编程 源文件编程意思是创建一个.py的文件,文件中可以写入大段的代码,运行时解释器会逐行读取并执行源文件的代码程序…

    2022年11月1日
    00
  • Python探索之Metaclass初步了解

    Python探索之Metaclass初步了解 什么是Metaclass Metaclass,中文翻译为元类,是一种特殊的类。和普通类一样,它可以定义方法、属性等。但是,普通类创建的实例,也就是对象,是该类的实例。而元类创建的类,也就是元类的实例,是普通类的类。 通过元类,我们可以控制生成的所有类。可以在动态创建类的过程中,控制、修改类的行为、属性、方法等。 …

    python 2023年6月5日
    00
  • python中dict使用方法详解

    python中dict使用方法详解 Python中的字典(dict)是一种用于存储键值对的数据结构,这种数据结构基于哈希表实现,提供了快速的查找、插入和删除操作。本文将介绍Python中字典的基本用法和高级用法,帮助您更好地理解和应用字典数据结构。 字典的基本用法 创建字典 在Python中,可以使用花括号({})创建一个空字典,也可以使用dict()构造函…

    python 2023年5月13日
    00
  • Python图像处理模块ndimage用法实例分析

    Python 图像处理模块ndimage用法实例分析 简介 Python中的ndimage模块是一个非常有用的图像处理库,它提供了一系列函数,可以用来处理任何维度(1D、2D、3D等)的图像。该模块主要用于对图像进行滤波、空间转换、显微镜拼接和操作图像的通用方式等方面的应用。 安装 ndimage模块是NumPy的一部分,因此你需要安装NumPy库才能使用n…

    python 2023年5月18日
    00
  • Python 列表的基本操作介绍

    以下是详细讲解“Python列表的基本操作介绍”的完整攻略。 在Python中,列表是一种非常常用的数据类型,它可以存储多个元素,并且支持各种操作。本文将介绍Python列表的基本操作,包括创建列表、访问列表元素、添加和删除元素、列表切片、列表排序等。 创建列表 在Python中,可以使用方括号[]或list()函数来创建一个列表。例如: lst1 = [1…

    python 2023年5月13日
    00
  • Python必备技巧之字符数据操作详解

    Python必备技巧之字符数据操作详解 字符数据类型 在Python中,字符串是一种常见的数据类型。字符串是一个由字符序列组成的不可变序列。因为字符串不可变,因此不能像列表一样进行就地修改。字符串可以使用单引号或双引号来表示。 字符串连接和重复 字符串可以连接起来形成新的字符串。连接操作可以使用+运算符或通过字符串插值完成。例如: str1 = "…

    python 2023年5月14日
    00
  • 不被别人察觉 Android手机的图形锁如何破解?

    对于这个问题,我作为网站作者,首先要明确一点:破解他人手机的图形锁是不道德且可能违法的行为,网站不会鼓励或者支持这种行为。在这里,我只能提供相关技术原理和可能的解决方案,而不会直接介绍破解方法。 在实际操作中,破解Android手机图形锁的方法多种多样,包括但不限于以下几种: 通过adb命令直接修改图形锁密码 这种方法需要在系统开启USB调试的情况下进行,具…

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