信息安全,密码学,rail fence cipher加密明文,秘钥长度4,顺序为4213

信息安全,密码学Cryptography,rail fence cipher加密明文”welcome to computer science,秘钥长度4顺序4213

img


import re


def Encipher(plaintext, keyLength, order):
    result_str = ''
    plaintext = plaintext.replace(" ", "")
    text_list = re.findall(r'.{%s}' % keyLength, plaintext)
    index = [i for i in range(keyLength)]
    index = sorted(index, key=lambda item: order[item])
    for i in range(keyLength):
        for text in text_list:
            result_str += text[index[i]]
    return result_str


if __name__ == '__main__':
    plaintext = input('plase input plaintext: ')
    keyLength = int(input('plase input keyLength: '))
    order = input('plase input order: ')
    ciphertext = Encipher(plaintext, keyLength, order)
    print('ciphertext =', ciphertext)

#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
string PermuteEncrypt(string s, vector<int> key){
    string primal,result;
    vector<int> a;
    string middle[11];
 
    //存储并删除串中的空格
    for (int i = 0; i < s.size(); i++)
        if(s[i] == ' ')a.push_back(i);
        else primal.push_back(s[i]);
 
    //按置换矩阵key读取
    for(int i = 0; i < primal.size(); i++){
         middle[i % key.size()].push_back(primal[i]);
    }
 
    //字符串合并
    for(int i = 0; i < key.size(); i++){
        result += middle[key[i]];
    }
 
    //读取并还原空格
    for (int i = 0, t = 0; i < s.size(); i++)
    {
        if(t>=a.size())
            break;
        if(a[t] == i){
            result.insert(result.begin() + i,' ');
            t++;
        }
    }
    return result;
}
 
int main(){
    string s;
    vector<int> key;
    key.push_back(3);
    key.push_back(1);
    key.push_back(0);
    key.push_back(2);
    getline(cin,s);       
    cout<<PermuteEncrypt(s,key);
    return 0;
}

c cu eemomeccwototsnle prie

import numpy as np

padding='&'
key=4
order='4213'
orgStr='welcome to computer science'
orgStr+=('' if len(orgStr)%key==0 else padding*(4-len(orgStr)%key))
data=list(orgStr)
print(data)
data=np.reshape(data,(-1,4))
print(data)
print([i for i in range(len(order)) ])
print(list(order))
data[:,[i for i in range(len(order)) ]]=data[:,[int(i)-1 for i in order]]
print(data)
data=data.transpose(1,0)
print(data)
data=data.reshape(-1)
print(data)
data=[i if not i=='&' else '' for i in data] 
print(data)
print(''.join(data))
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632