📜  使用以下操作加密给定的字符串(1)

📅  最后修改于: 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加密

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加密

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