欢迎访问宙启技术站
智能推送

如何在Python中实现基本的加密和解密算法

发布时间:2023-12-04 14:28:31

在Python中实现基本的加密和解密算法可以使用一些常见的加密算法,如凯撒密码、栅栏密码、异或加密等。下面分别介绍这些算法的实现方式,并附上相应的使用例子。

1. 凯撒密码

凯撒密码是一种基于字母偏移的简单替换式密码算法,它通过字母表中每个字母向后(或向前)移动固定数量的位置来加密和解密文本。下面是凯撒密码的实现代码和使用例子:

def caesar_encrypt(text, shift):
    encrypted_text = ""
    for char in text:
        if char.isalpha():
            if char.isupper():
                encrypted_text += chr((ord(char) - 65 + shift) % 26 + 65)
            else:
                encrypted_text += chr((ord(char) - 97 + shift) % 26 + 97)
        else:
            encrypted_text += char
    return encrypted_text

def caesar_decrypt(text, shift):
    return caesar_encrypt(text, -shift)

# 使用例子
text = "Hello, World!"
shift = 3
encrypted_text = caesar_encrypt(text, shift)
decrypted_text = caesar_decrypt(encrypted_text, shift)

print("加密后的文本:", encrypted_text)
print("解密后的文本:", decrypted_text)

2. 栅栏密码

栅栏密码是一种基于行数的置换式密码算法,它将明文按照一定的行数排列,然后从上到下、从左到右读取加密后的文本。下面是栅栏密码的实现代码和使用例子:

def fence_encrypt(text, rails):
    encrypted_text = ""
    fence = [['
' for _ in range(len(text))] for __ in range(rails)]
    direction = -1
    row, col = 0, 0
    
    for char in text:
        if row == 0 or row == rails - 1:
            direction *= -1
        fence[row][col] = char
        col += 1
        row += direction
    
    for i in range(rails):
        for j in range(len(text)):
            if fence[i][j] != '
':
                encrypted_text += fence[i][j]
    
    return encrypted_text

def fence_decrypt(text, rails):
    decrypted_text = ""
    fence = [['
' for _ in range(len(text))] for __ in range(rails)]
    direction = -1
    row, col = 0, 0
    
    for char in text:
        if row == 0 or row == rails - 1:
            direction *= -1
        fence[row][col] = '*'
        col += 1
        row += direction
    
    index = 0
    for i in range(rails):
        for j in range(len(text)):
            if fence[i][j] == '*' and index < len(text):
                fence[i][j] = text[index]
                index += 1
    
    direction = -1
    row, col = 0, 0
    
    for _ in range(len(text)):
        if row == 0 or row == rails - 1:
            direction *= -1
        decrypted_text += fence[row][col]
        col += 1
        row += direction
    
    return decrypted_text

# 使用例子
text = "Hello, World!"
rails = 3
encrypted_text = fence_encrypt(text, rails)
decrypted_text = fence_decrypt(encrypted_text, rails)

print("加密后的文本:", encrypted_text)
print("解密后的文本:", decrypted_text)

3. 异或加密

异或加密是一种将明文与密钥进行异或运算的简单加密算法,它能够很好地保护数据的机密性。下面是异或加密的实现代码和使用例子:

def xor_encrypt(text, key):
    encrypted_text = ""
    for char in text:
        encrypted_text += chr(ord(char) ^ key)
    return encrypted_text

def xor_decrypt(text, key):
    return xor_encrypt(text, key)

# 使用例子
text = "Hello, World!"
key = 0xFF
encrypted_text = xor_encrypt(text, key)
decrypted_text = xor_decrypt(encrypted_text, key)

print("加密后的文本:", encrypted_text)
print("解密后的文本:", decrypted_text)

在实际使用时,可以根据需要选择适合的加密算法,并结合具体的业务场景进行调用。