标签:单词 ase pycha lsp har 方法 case nbsp ext
| 
 实 验 目 的  | 
 1、 熟悉和掌握替代加密算法的原理及其一般过程; 
 2、掌握对称加密算法的基本方法:维吉尼亚密码 
 3、掌握使用一定的编码开发工具(对具体的开发平台和工具不作要求)。  | 
| 
 实 验 环 境  | 
 
 Python3+pycharm  | 
| 
 实 验 步 骤  | 
 Vigenenre 密码使用一个词组作为密钥,密钥中每一个字母用来确定一个代换表, 每一个密钥字母被用来加密一个明文字母,第一个密钥字母加密第一个明文字母, 第二个密钥字母加密第二个明文字母,等所有密钥字母使用完后,密钥再次循环使用, 于是加解密前需先将明密文按照密钥长度进行分组。 
 
 密码算法可表示如下: 设密钥 K = ( kl ; kZ ; … ; kd ) , 明文 M = ( ml , mZ , … ; mn ) , 密文 C = ( cl ; cZ ; … ; cn ) ; 加密变换为: ci = Ek(mi) = mi + k( mod 26 ) 解密变换为: mi = Dk( ci ) = ci- ki ( mod 26 ) 
 
  | 
| 
 实 验 结 果  | 
 (1) 解密TSOGF MMEIS ZIDJH VVCBH ACLIE FQID 加密密钥key:COMPLETE   Recruit agents for ortopspy Secrets(招募奥拓间谍秘密的特工) 
 解密QWTBA RALXI JHKVB OR 加密密钥key:ESPIONAGE   
 
 (2)加密MEET ME AFTER SCHOOL 。单词“ESPIONAGE”做为密钥 
  | 
| 
 实 验 总 结  | 
 
 
 先构思好算法和加解密原理,再进行代码的实现  | 
附录
# -*- coding: utf-8 -*-
"""
Created on Nov 27 08:17:01 2018 at D704
@author: Kevil
"""
from string import ascii_lowercase as lowercase
# 加密
def VigenereEncrypto(p, key):
    p = get_trim_text(p)
    ptLen = len(p)
    keyLen = len(key)
    quotient = ptLen // keyLen  #
商
    remainder = ptLen % keyLen  #
余
    out = ""
    for i in range(0, quotient):
        for j in range(0, keyLen):
            c = int((ord(p[i * keyLen +
j]) - ord(‘a‘) + ord(key[j]) - ord(‘a‘)) % 26 + ord(‘a‘))
            # global output
            out += chr(c)
    for i in range(0, remainder):
        c = int((ord(p[quotient *
keyLen + i]) - ord(‘a‘) + ord(key[i]) - ord(‘a‘)) % 26 + ord(‘a‘))
        # global output
        out += chr(c)
    return out
# 解密
def VigenereDecrypto(output, key):
    ptLen = len(output)
    keyLen = len(key)
    quotient = ptLen // keyLen
    remainder = ptLen % keyLen
    inp = ""
    for i in range(0, quotient):
        for j in range(0, keyLen):
            c = int((ord(output[i *
keyLen + j]) - ord(‘a‘) - (ord(key[j]) - ord(‘a‘))) % 26 + ord(‘a‘))
            # global input
            inp += chr(c)
    for i in range(0, remainder):
        c = int((ord(output[quotient
* keyLen + i]) - ord(‘a‘) - (ord(key[i]) - ord(‘a‘))) % 26 + ord(‘a‘))
        # global input
        inp += chr(c)
    return inp
def get_trim_text(text):
    text = text.lower()
    trim_text = ‘‘
    for l in text:
        if lowercase.find(l) >= 0:
            trim_text += l
    return trim_text
if __name__ == ‘__main__‘:
    prompt = """
(1)加密
(2)解密        #解密时请勿输入空格键
(3)退出
请输入您要执行的口令: """
    while (True):
        choice = input(prompt)
        if choice == ‘1‘:
            p = input("请输入明文: ")
            k = input("请输入密钥: ")
            print("加密后的密文是: %s" % (VigenereEncrypto(p, k)))
        elif choice == ‘2‘:
            c = input("请输入密文: ")
            k = input("请输入密钥: ")
            print("解密后的明文是: %s" % (VigenereDecrypto(c, k)))
        elif choice == ‘3‘:
            break
        else:
            print("不存在该口令")
标签:单词 ase pycha lsp har 方法 case nbsp ext
原文地址:https://www.cnblogs.com/WhiteHatKevil/p/10045659.html