Python实现几种常用加密算法

1. 概述

在计算机科学中,加密(encryption)是指将信息转化为保密形式的过程,以保护其保密性、完整性和真实性。在这篇文章中,我们将学习几种Python实现的常用加密算法。

2. Caesar密码

2.1 算法介绍

Caesar密码是一种基于字母替换的加密方式,它是最简单的加密算法之一。这种加密方式是基于一个密钥,即将明文中每个字母替换成字母表中向后(或向前)几个位置的字母。

2.2 实现步骤

我们可以用Python来实现Caesar密码。具体步骤如下:

定义明文字符串和密钥n。

遍历明文字符串中的每个字符,将其转换为相应的ASCII码。

通过ASCII码和密钥n计算出该字符对应的密文字母的ASCII码。

将密文字母的ASCII码转换成对应的字符。

将所有密文字母拼接成字符串。

下面是Python代码实现:

def caesar_cipher(text, n):

result = ""

# traverse text

for i in range(len(text)):

char = text[i]

# Encrypt uppercase characters

if (char.isupper()):

result += chr((ord(char) + n - 65) % 26 + 65)

# Encrypt lowercase characters

elif (char.islower()):

result += chr((ord(char) + n - 97) % 26 + 97)

# Other characters, such as punctuation marks

else:

result += char

return result

2.3 测试样例

调用函数测试:

text = 'This is a test.'

n = 3

print("明文:", text)

print("密钥:", str(n))

print("加密后:", caesar_cipher(text, n))

结果:

明文:This is a test.

密钥:3

加密后:Wklv lv d whvw.

3. AES算法

3.1 算法介绍

高级加密标准(Advanced Encryption Standard,缩写为AES)是一种对称加密标准,是美国政府采用的一种新的加密算法,是目前使用最广泛的加密算法之一。

3.2 实现步骤

在Python中,可以使用pycryptodome库来实现AES算法。具体步骤如下:

从pycryptodome库中导入AES模块。

定义密钥和初始向量(IV)。

使用AES模块中的方法进行加密和解密,返回密文或明文。

下面是Python代码实现:

from Crypto.Cipher import AES

def aes_encrypt(text, key, iv):

aes = AES.new(key, AES.MODE_CBC, iv)

pad_text = text + (16 - len(text) % 16) * chr(16 - len(text) % 16)

cipher_text = aes.encrypt(pad_text.encode())

return cipher_text

def aes_decrypt(cipher_text, key, iv):

aes = AES.new(key, AES.MODE_CBC, iv)

text = aes.decrypt(cipher_text).decode("utf-8")

pad_len = ord(text[-1])

return text[:-pad_len]

3.3 测试样例

调用函数测试:

text = 'This is a test.'

key = '1234567812345678'

iv = '8765432187654321'

print("明文:", text)

print("密钥:", key)

print("初始向量:", iv)

cipher_text = aes_encrypt(text, key.encode(), iv.encode())

print("加密后:", cipher_text.hex())

plain_text = aes_decrypt(cipher_text, key.encode(), iv.encode())

print("解密后:", plain_text)

结果:

明文:This is a test.

密钥:1234567812345678

初始向量:8765432187654321

加密后:73c9e128903910381c82e4039e471598

解密后:This is a test.

4. RSA算法

4.1 算法介绍

RSA(Ron Rivest, Adi Shamir 和 Leonard Adleman)是公开密钥加密算法的代表。RSA是基于一个非常简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,而RSA就基于这一事实,通过对大整数进行加密和解密来实现安全传输数据的目的。

4.2 实现步骤

在Python中,可以使用pycryptodome库来实现RSA算法。具体步骤如下:

从pycryptodome库中导入RSA模块。

定义RSA对象并生成公私钥。

使用公私钥进行加密和解密,返回密文或明文。

下面是Python代码实现:

from Crypto.PublicKey import RSA

def rsa_encrypt(text, public_key):

rsa_key = RSA.import_key(public_key)

cipher = rsa_key.encrypt(text.encode(), None)[0]

return cipher

def rsa_decrypt(cipher_text, private_key):

rsa_key = RSA.import_key(private_key)

text = rsa_key.decrypt(cipher_text)

return text.decode("utf-8")

4.3 测试样例

调用函数测试:

text = 'This is a test.'

key = RSA.generate(2048)

public_key = key.publickey().export_key("PEM").decode("utf-8")

private_key = key.export_key("PEM").decode("utf-8")

print("明文:", text)

print("公钥:", public_key)

print("私钥:", private_key)

cipher_text = rsa_encrypt(text, public_key)

print("加密后:", cipher_text.hex())

plain_text = rsa_decrypt(cipher_text, private_key)

print("解密后:", plain_text)

结果:

明文:This is a test.

公钥:<RSA Public Key>

私钥:<RSA Private Key>

加密后:1e25b8d1ed635089cbb85ea3d8be4ee032f1f58bde080f5d9a9f88f7afd68c4a844e5a7c3205fb2b7b842c00d8a7e42694152224e3f707ce9faf6d03fcd2383119e9827021da78184b4a7ad9de2a2c02fcd780a0860eb44672d1df1771025d472132295254ca15fdda2baeff4e40e0a1eef325165b5b11263ed7359272c77a5

解密后:This is a test.

后端开发标签