第三代加密法-维吉尼亚加密法代码实现

1.密码学课代码实现

英文加密
def my_encode_2_english(plaintext,key):
    n = len(key)
    encode_string = ''
    move_numbers = [ord(e)-97 for e in key]
    t = -1
    for chr_ in plaintext:
        t += 1
        string_to_asscii = ord(chr_)
        move_index =t%n
        move_number = move_numbers[move_index]
        move = string_to_asscii + move_number
        if move > 122:
            move = 97+(move-123)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
        encode_string += chr(move)
    return encode_string

def my_decode_2_english(clipher,key):
    n = len(key)
    decode_string = ''
    move_numbers = [ord(e)-97 for e in key]
    t = -1
    for chr_ in clipher:
        t += 1
        string_to_asscii = ord(chr_)
        move_index =t%n
        move_number = move_numbers[move_index]
        move = string_to_asscii - move_number
        if move < 97:
            move = 123 -(97 - (string_to_asscii-move_number) )
            print(move ,string_to_asscii,move_number)
        decode_string += chr(move)
    return decode_string        
    
key = 'yes'
string = """hello""" 
encoding2 = my_encode_2_english(string,key) 
decoding2 = my_decode_2_english(encoding2,key)
encoding2,decoding2
中文加密

def my_encode_2(plaintext,key):
    n = len(key)
    encode_string = ''
    move_numbers = [ord(e) for e in key]
    t = -1
    for chr_ in plaintext:
        t += 1
        string_to_asscii = ord(chr_)
        move_index =t%n
        move_number = move_numbers[move_index]
        move = string_to_asscii + move_number
        encode_string += chr(move)
    return encode_string

def my_decode_2(clipher,key):
    n = len(key)
    decode_string = ''
    move_numbers = [ord(e) for e in key]
    t = -1
    for chr_ in clipher:
        t += 1
        string_to_asscii = ord(chr_)
        move_index =t%n
        move_number = move_numbers[move_index]
        move = string_to_asscii - move_number
        decode_string += chr(move)
    return decode_string

key = 'yes'        
string = """english"""       
encoding2 = my_encode_2(string,key) 
decoding2 = my_decode_2(encoding2,key)
encoding2,decoding2           
 

查表实现

import numpy as np
import pandas as pd 
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.max_colwidth', None)

start_number = 97
end_number = 122
letter_lenght = end_number-start_number+1
Vigenère_table = {}

for i in range(letter_lenght):
    letter = chr(i+97)
    ciphers = []
    for j in range(letter_lenght):
        cipher = 97+j+i
        if cipher > 122:
            cipher = cipher-123+97 
        ciphers.append(chr(cipher))
    Vigenère_table.update({letter:ciphers})

Vigenère_table = pd.DataFrame(Vigenère_table)
Vigenère_table = Vigenère_table.T
print(f"维吉尼亚密码表:\n{Vigenère_table}")

Vigenère_table_numpy = Vigenère_table.to_numpy()

def my_encode_2_english_1(plaintext,key,Vigenère_table):
    n=len(key)
    encode_string = ''
    move_numbers = [ord(e)-97 for e in key]
    t = -1
    for chr_ in plaintext.lower():
        t += 1
        asscii_index = ord(chr_)-97
        move_index = t%n
        move_number = move_numbers[move_index]
        cipher_letter = Vigenère_table[asscii_index][move_number]
        print(chr_,asscii_index,move_number)
        encode_string += cipher_letter
    return encode_string

def my_decode_2_english_1(clipher,key,Vigenère_table):
    n=len(key)
    encode_string = ''
    move_numbers = [ord(e)-97 for e in key]
    t = -1
    for chr_ in clipher:
        t += 1
        move_index =t%n
        move_number = move_numbers[move_index]
        column = Vigenère_table[:,move_number:move_number+1]
        letter_index = np.where(column==chr_)[0][0]
        letter_asscii = 97+letter_index
        encode_string += chr(letter_asscii) 
    return encode_string
        

        
key = 'yes'
string = """Hello""" 
encoding2_1 = my_encode_2_english_1(string,key,Vigenère_table=Vigenère_table_numpy) 
decoding2_1 = my_decode_2_english_1(encoding2_1,key,Vigenère_table=Vigenère_table_numpy)
encoding2_1,decoding2_1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值