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.