Vigenere密码 Python实现

本文介绍了如何使用Python实现Vigenere密码的加密和解密功能。通过定义Get_KeyList、Encrypt和Decrypt三个函数,实现了根据输入的密钥进行字母加密和解密的完整过程。用户可以选择加密(D)或解密(E),并输入相应的明文或密文进行操作。
摘要由CSDN通过智能技术生成
#########################Vigenere密码#########################

letter_list='ABCDEFGHIJKLMNOPQRSTUVWXYZ'  #字母表

#根据输入的key生成key列表
def Get_KeyList(key):
  key_list=[]
  for ch in key:
    key_list.append(ord(ch.upper())-65)
  return key_list
  
#加密函数
def Encrypt(plaintext,key_list):
  ciphertext=""
  
  i=0
  for ch in plaintext:  #遍历明文
    if 0==i%len(key_list):
      i=0
    if ch.isalpha():  #明文是否为字母,如果是,则判断大小写,分别进行加密
      if ch.isupper():  
        ciphertext+=letter_list[(ord(ch)-65+key_list[i]) % 26]
        i+=1
      else:
        ciphertext+=letter_list[(ord(ch)-97+key_list[i]) % 26].lower()
        i+=1
    else: #如果密文不为字母,直接添加到密文字符串里
      ciphertext+=ch
  return ciphertext
  
#解密函数
def Decrypt(ciphertext,key):
  plaintext=""
  
  i=0
  for ch in ciphertext: #遍历密文
    if 0==i%len(key_list):
      i=0
    if ch.isalpha():  #密文
Vigenere密码是一种古老的加密算法,它使用一个关键字来对明文进行加密,因此也被称为多表密码。下面是使用 Python 实现 Vigenere 加解密的代码: ```python def vigenere_encrypt(plaintext, key): """ 使用 Vigenere 密码加密明文 :param plaintext: 明文 :param key: 密钥 :return: 密文 """ ciphertext = "" key_len = len(key) for i in range(len(plaintext)): shift = ord(key[i % key_len]) - ord("a") ciphertext += chr((ord(plaintext[i]) - ord("a") + shift) % 26 + ord("a")) return ciphertext def vigenere_decrypt(ciphertext, key): """ 使用 Vigenere 密码解密密文 :param ciphertext: 密文 :param key: 密钥 :return: 明文 """ plaintext = "" key_len = len(key) for i in range(len(ciphertext)): shift = ord(key[i % key_len]) - ord("a") plaintext += chr((ord(ciphertext[i]) - ord("a") - shift) % 26 + ord("a")) return plaintext ``` 使用示例: ```python plaintext = "hello" key = "world" ciphertext = vigenere_encrypt(plaintext, key) print(ciphertext) # 输出:dahit decrypted_plaintext = vigenere_decrypt(ciphertext, key) print(decrypted_plaintext) # 输出:hello ``` 在上述代码中,`vigenere_encrypt` 函数接受明文和密钥作为输入,并返回加密后的密文。`vigenere_decrypt` 函数接受密文和密钥作为输入,并返回解密后的明文。在这两个函数中,我们使用了 `ord` 函数将字符转换成 ASCII 码,使用了 `chr` 函数将 ASCII 码转换成字符,使用了 `%` 运算符实现循环移位。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值