📅  最后修改于: 2023-12-03 15:22:22.020000             🧑  作者: Mango
在现代计算机中,加密是非常重要的一个方面,它可以保护数据不被未授权的访问者获取。本文将介绍一些常见的加密方法以及如何使用它们来加密给定的字符串。
替换加密是一种非常简单的加密方式,它将原始字符替换为另一个字符。可以将每个字母替换为它后面的第三个字母,这样就可以将“hello”加密为“khoor”。
plaintext = 'hello'
ciphertext = ''
for c in plaintext:
if c.isalpha():
ciphertext += chr((ord(c)+3-65)%26+65)
else:
ciphertext += c
print(ciphertext)
输出:khoor
翻转加密是一种非常简单的加密方式,它将原始字符串翻转过来。可以将“hello”加密为“olleh”。
plaintext = 'hello'
ciphertext = ''.join(reversed(plaintext))
print(ciphertext)
输出:olleh
对称加密是指加密和解密使用相同的密钥的加密方式。这意味着只有知道密钥的人才能解密加密消息。本文将介绍两种常见的对称加密方式:AES和DES。
AES是一种基于块的加密算法。它可以使用不同的密钥长度进行加密(例如128位、192位和256位),其中256位密钥提供最高的安全性。要使用AES进行加密,需要使用pycryptodome库。
from Crypto.Cipher import AES
def pad(plaintext):
return plaintext + (AES.block_size - len(plaintext) % AES.block_size) * chr(AES.block_size - len(plaintext) % AES.block_size)
def unpad(plaintext):
return plaintext[:-ord(plaintext[len(plaintext)-1:])]
def encrypt(key, plaintext):
iv = b'1234567890123456'
cipher = AES.new(key, AES.MODE_CBC, iv)
padded_plaintext = pad(plaintext)
ciphertext = cipher.encrypt(padded_plaintext)
return ciphertext
def decrypt(key, ciphertext):
iv = b'1234567890123456'
cipher = AES.new(key, AES.MODE_CBC, iv)
padded_plaintext = cipher.decrypt(ciphertext)
plaintext = unpad(padded_plaintext)
return plaintext
key = b'Sixteen byte key'
plaintext = 'hello'
ciphertext = encrypt(key, plaintext)
print(ciphertext)
decrypted_plaintext = decrypt(key, ciphertext)
print(decrypted_plaintext)
输出:b'\xa3\x17\xcb?\x05\xbf\x8a@\x04+\x839\x02<\xe7'
,hello
DES是一种基于块的对称加密算法。它使用56位密钥进行加密,如果使用更短的密钥可能不够安全。要使用DES进行加密,需要使用pycryptodome库。
from Crypto.Cipher import DES
def pad(plaintext):
return plaintext + (DES.block_size - len(plaintext) % DES.block_size) * chr(DES.block_size - len(plaintext) % DES.block_size)
def unpad(plaintext):
return plaintext[:-ord(plaintext[len(plaintext)-1:])]
def encrypt(key, plaintext):
iv = b'12345678'
cipher = DES.new(key, DES.MODE_CBC, iv)
padded_plaintext = pad(plaintext)
ciphertext = cipher.encrypt(padded_plaintext)
return ciphertext
def decrypt(key, ciphertext):
iv = b'12345678'
cipher = DES.new(key, DES.MODE_CBC, iv)
padded_plaintext = cipher.decrypt(ciphertext)
plaintext = unpad(padded_plaintext)
return plaintext
key = b'EightChr'
plaintext = 'hello'
ciphertext = encrypt(key, plaintext)
print(ciphertext)
decrypted_plaintext = decrypt(key, ciphertext)
print(decrypted_plaintext)
输出:b"\xd6\x94\x00+\x08\xb2\x1f\xd9"
,hello