精华内容
下载资源
问答
  • 数据加密——列置换加密
    2021-10-06 11:27:40

    数据加密——列置换加密

    刚刚在做计算机网络原理真题中有个这样的题,考到了列置换加密,记录一下自己的理解。

    列置换加密,概念性的东西就不说了,网上都有,直接写我自己的理解,干货。

    从明文 ———— 密文 (加密)
    现有明文:computrnetworkprinciple
    加密后密文为:cuerippnoriottknlmrwpce
    密钥为字符串: code
    过程:

    第一步先把密钥转换为一个数字,这个数字是加密的关键,转换方法为,首先得到字母的个数,这里code为4,然后得到1至这个数的所有数,这里为1,2,3,4.。然后按26个字母的顺序来,越靠前的,数字越小,若位置相同,则靠左边的越小,所以字符串code就等于 1423. 因为c最靠前,d其次,e第三,最后才是o, 所以c代表1,o代表4,e代表3,d代表2,连起来即1423.

    第二部,将明文转化为一个矩阵,矩阵的行元素个数为字母的个数,即为4,我们将明文转化后可得:
    c o m p
    u t r n
    e t w o
    r k p r
    i n c i
    p l e

    按1423的索引顺序读取即可
    先索引为1的列
    cuerip
    然后索引为4的列
    pnori
    然后2
    ottknl
    然后3
    mrwpce

    将上面的字符串连起来可得到密文。

    如果是解密的话,则反着填写矩阵就可以得到明文了。

    更多相关内容
  • 用c++语言实现的古典密码算法列置换的演示程序。
  • 主要为大家详细介绍了java实现置换密码加密解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 列置换密码

    目录

    列置换密码

    1、原理

    2、流程图

    3、编程实现

    4、总结


    列置换密码

    1、原理

            置换密码(Permutation Cipher)又叫换位密码(Transposition Cipher),其特点就是保持明文的所有字符不变,打乱明文字符的位置和次序。常见的置换密码有两种:列置换密码周期置换密码

            列置换的加密过程:

            1.将明文M以设定的固定分组宽度m按写出,即每行有m个字符。若明文不是m的整数倍,用双方提前规定好的方式补充,如空格,得到矩阵M_{[m\times n]}

            2.按1,2,3 ...m的某一置换交换列的位置次序得到新的字符矩阵。

            3.按的顺序依次读出得密文序列C。

            解密过程:

            1.将密文C按加密过程的分组宽度m按写出字符矩阵。

            2.按加密过程的置换的逆置换的位置次序得到新的字符矩阵。

            3.按的顺序依次读出得明文序列M。

    2、流程图

    3、编程实现

            难点:如何根据密钥实现列置换和逆置换。

            因为主要是学习算法思想,程序用户输入明文分组的固定长度,再输入列置换,得到密文。之后通过求出列置换的逆置换,解密得到明文。

            具体代码如下:

            主函数

    #include"ColPermutation.h"
    
    int main() {
    	while (1) {
    		show();		//菜单界面
    		keyDown();	//按键处理
    		system("pause");
    		system("cls");
    	}
    }

            头文件ColPermutation.h  

    #pragma once
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<Windows.h>
    #include<vector>
    using namespace std;
    void init();
    void show();
    void keyDown();
    void readFile();
    void saveFile();
    void encrypt();
    void decrypt();

             ColPermutation.cpp

    #include "ColPermutation.h"
    
    string fileStr = "";
    string finalStr = "";
    
    void init()//初始化
    {
    	fileStr = "";
    	finalStr = "";
    }
    
    void show()
    {
    	cout << "***************列置换密码***************" << endl;
    	cout << "\t\t1.加密文件" << endl;
    	cout << "\t\t2.解密文件" << endl;
    	cout << "\t\t3.退出" << endl;
    	cout << "******************************************" << endl;
    
    }
    
    void keyDown()//按键处理
    {
    	int userkey = 0;
    	cin >> userkey;
    	switch (userkey) {
    	case 1:
    		cout << "-----------------加密文件-----------------" << endl;
    		readFile();
    		encrypt();
    		saveFile();
    		init();
    		break;
    	case 2:
    		cout << "-----------------解密文件-----------------" << endl;
    		readFile();
    		decrypt();
    		saveFile();
    		init();
    		break;
    	case 3:
    		exit(0);
    		break;
    	}
    }
    
    void readFile()//读取文件
    {
    	cout << "请输入文件名:" << endl;
    	string fileName;
    	cin >> fileName;
    	FILE* fp = fopen(fileName.c_str(), "r+");
    	if (fp == nullptr) {
    		cout << "未找到相关文件" << endl;
    		return;
    	}
    	else {
    		cout << "成功打开文件" << endl;
    	}
    	char ch;
    	int pos = 0;
    	while ((ch = fgetc(fp)) != EOF) {
    		fileStr += ch;
    	}
    	cout << endl << "待处理的文件为:" << endl;
    	cout << fileStr << endl;
    	fclose(fp);
    }
    
    void saveFile()//保存文件
    {
    	string fileName;
    	cout << endl << "请输入要保存信息的文件名:" << endl;
    	cin >> fileName;
    	FILE* fp = fopen(fileName.c_str(), "w+");
    	if (fp == nullptr) {
    		cout << endl << "保存文件失败" << endl;
    		return;
    	}
    	else {
    		cout << endl << "保存成功" << endl;
    	}
    	fprintf(fp, "%s", finalStr.c_str());
    	fclose(fp);
    
    }
    
    void encrypt()//加密文件
    {
    	cout << endl << "请输入密钥:(固定长度和列置换)" << endl;
    	cout << "请输入固定长度:" << endl;
    	int length = 0;
    	cin >> length;
    
    	int col = fileStr.size() / length + (fileStr.size() % length != 0);//每列的长度
    
    	cout << "明文矩阵为:" << endl;
    	for (int i = 0; i < fileStr.size(); i++) {
    		if (i != 0 && i % length == 0)cout << endl;
    		cout << fileStr[i] << " ";//明文矩阵
    	}
    	cout << endl;
    
    	vector<string> c;//存放明文的数组
    	int pos = 0;
    	for (int i = 0; i < length; i++) {
    		int pos = i;
    		string temp = "";
    		while (pos < fileStr.size()) {
    			temp += fileStr[pos];
    			pos += 6;
    		}
    		if (temp.size() != col)temp += ' ';
    		c.push_back(temp);//按列存入数组中
    	}
    
    
    	int* key = new int[length + 1]();//存放列置换 key[目标列]=源列
    
    	while (1) {
    		cout << "请输入一组列置换:" << endl;
    		string temp = "";
    		cin >> temp;//列置换字符串// 143或者56
    		//求key
    		//(1 4 3)(5 6)
    		//key[1]=4  key[2]=2  key[3]=1  key[4]=3  key[5]=6 key[6]=5
    		for (int i = 0; i < temp.size(); i++) {
    			if (i == temp.size() - 1) {
    				key[temp[i] - '0'] = temp[0] - '0';
    			}
    			else key[temp[i] - '0'] = temp[i + 1] - '0';
    		}
    		//继续输出还是退出
    		char ch = '\0';
    		cout << "是否继续输入列置换(y/n)?" << endl;
    		cin >> ch; if (ch == 'n')break;
    	}
    
    	for (int i = 1; i <= length; i++) {
    		if (key[i] == 0) {
    			key[i] = i;//不移动的列序号
    		}
    		//cout << i << " " << key[i] << endl;
    	}
    
    	cout << endl << "按下任意键进行加密" << endl;
    	char ch = getchar(); ch = getchar();
    
    	for (int i = 1; i <= length; i++) {
    		finalStr += c[key[i] - 1];
    	}	
    
    	cout << "密文矩阵为:" << endl;
    	for (int i = 0; i < col; i++) {
    		for (int j = 1; j <= length; j++) {
    			cout << c[key[j] - 1][i] << " ";
    		}
    		cout << endl;
    	}
    
    	cout << endl << "得到的密文为:" << endl;
    	cout << finalStr << endl;
    }
    
    void decrypt()//解密文件
    {
    	cout << endl << "请输入密钥:(固定长度和列置换)" << endl;
    	cout << "请输入固定长度:" << endl;
    	int length = 0;
    	cin >> length;
    
    	int col = fileStr.size() / length + (fileStr.size() % length != 0);//每列的长度
    
    	cout << "密文矩阵为:" << endl;
    	for (int i = 0; i < col; i++) {
    		int pos = i;
    		for (int j = i; j < fileStr.size(); j += col) {
    			cout << fileStr[j] << " ";
    		}
    		cout << endl;
    	}
    
    	vector<string> antic;//存放密文的数组
    	for (int i = 0; i < fileStr.size();) {
    		antic.push_back(string(fileStr.begin() + i, fileStr.begin() + i + col));
    		i += col;
    	}
    
    	int* antikey = new int[length + 1]();//存放列置换 key[目标列]=源列
    
    	while (1) {
    		cout << "请输入一组列置换(不是列置换的逆置换):" << endl;
    		string temp = "";
    		cin >> temp;//列置换字符串// 143和56
    		//(1 4 3)(5 6)
    		for (int i = 0; i < temp.size(); i++) {
    			if (i == 0) {
    				antikey[temp[i] - '0'] = temp[temp.size() - 1] - '0';
    			}
    			else antikey[temp[i] - '0'] = temp[i - 1] - '0';
    		}
    		//继续输出还是退出
    		char ch = '\0';
    		cout << "是否继续输入列置换(y/n)?" << endl;
    		cin >> ch; if (ch == 'n')break;
    	}
    
    
    	cout << "列置换的逆置换为:" << endl;
    
    	for (int i = 1; i <= length; i++) {
    		if (antikey[i] == 0) {
    			antikey[i] = i;
    		}
    		//cout << i << " " << antikey[i] << endl;
    	}
    
    	cout << "成功得到列置换的逆置换!" << endl;
    
    	cout << endl << "按下任意键进行解密" << endl;
    	char ch = getchar(); ch = getchar();
    
    
    	cout << "明文矩阵为:" << endl;
    	for (int i = 0; i < col; i++) {
    		for (int j = 1; j <= length; j++) {
    			cout << antic[antikey[j] - 1][i] << " ";
    			finalStr += antic[antikey[j] - 1][i];//按行输出的明文
    		}
    		cout << endl;
    	}
    
    
    	cout << endl << "得到的明文为:" << endl;
    	cout << finalStr << endl;
    }

    4、总结

             列置换密码的有很多不同的细节实现,但主要算法思想是一样的,同样和之前一样学习算法思想是最主要的,编程实现可以帮助我们更好的学习和理解。

    展开全文
  • 用C++实现置换密码加密解密算法,此文档为代码实现
  • 列置换密码

    千次阅读 2020-04-17 03:12:11
    列置换密码 参考教材:《现代密码学教程》P46 3.1.1 过程 加密过程 将明文p以设定的固定分组宽度m按行写出,即每行有m个字符;若明文长度不是m的整数倍,则不足部分用双方约定的方式填充,如双方约定用空格代替空缺处...

    列置换密码

    参考教材:《现代密码学教程》P46 3.1.1

    过程

    加密过程

    1. 将明文p以设定的固定分组宽度m按行写出,即每行有m个字符;若明文长度不是m的整数倍,则不足部分用双方约定的方式填充,如双方约定用空格代替空缺处字符,不妨设最后得字符矩阵[Mp]n×m
    2. 按1,2…,m的某一置换σ交换列的位置次序得字符矩阵[Mp]n×m
    3. 把矩阵按[Mp]n×m列的顺序依次读出得密文序列c

    解密过程

    1. 将密文c以分组宽度n按列写出得到字符矩阵[Mp]n×m
    2. 按加密过程用的置换σ的逆置换σ-1交换列的位置次序得字符矩阵[Mp]n×m
    3. 把矩阵[Mp]n×m按1,2…,n行的顺序依次读出得明文p

    说明

    以例3.2为例
    在这里插入图片描述
    σ=(143)(56)即每个括号里部分轮着相对应
    1→4→3→1
    5→6→5
    这里我是用字典表示

            for i in range(len(s)): 
                for j in range(len(s[i])-1):
                    Key[int(s[i][j])]=int(s[i][j+1]) #密钥字典
                    antiKey[int(s[i][j+1])]=int(s[i][j]) #反密钥字典
                Key[int(s[i][-1])]=int(s[i][0]) #解决最后一个的问题
                antiKey[int(s[i][0])]=int(s[i][-1])
                temp.append(int(s[i][-1]))
    

    当然,这儿σ=(143)(56)中没有2,因为2对应他自己即
    2→2
    所以要再单独表示

    sameKey=lenKey-set(temp) #找到没有变化的密钥
        for i in sameKey:
            Key[i]=i
            antiKey[i]=i
    

    而加密的时候,便是把明文先变为矩阵,载根据密钥进行转换
    比如本题便将矩阵第一列转换为第四列,第四列转换为第三列,第三列转换为第一列,以此类推
    这里可以用生成式完成

    M=[M[i][Key[j+1]-1] for i in range(n) for j in range(m)] #矩阵转换
    

    完整代码

    '''列置换密码
    Auher:Jarrycow
    time:2020-04-17
    '''
    import re
    
    class colCode:
        __m=0
        __n=0
        __key=[] # 密钥
        __apaMsg="" # 明文
        __secMsg="" #密文
        
        def __init__(self,m): # 初始化,定义矩阵宽
            self.__m=m
            __n=0
            __key=[] 
            __apaMsg="" 
            __secMsg="" 
        def getKey(self,s): # 密钥形成函数
            m=self.__m
            Key={}
            antiKey={}
            s=re.split(r'[()]',s) #以()分界
            while '' in s: # 消除''
                s.remove('')
            temp=[]
            lenKey={i+1 for i in range(m)} #密钥长度
            for i in range(len(s)): 
                for j in range(len(s[i])-1):
                    Key[int(s[i][j])]=int(s[i][j+1]) #密钥字典
                    antiKey[int(s[i][j+1])]=int(s[i][j]) #反密钥字典
                    temp.append(int(s[i][j])) #钥匙收录
                Key[int(s[i][-1])]=int(s[i][0]) #解决最后一个的问题
                antiKey[int(s[i][0])]=int(s[i][-1])
                temp.append(int(s[i][-1]))
            sameKey=lenKey-set(temp) #找到没有变化的密钥
            for i in sameKey:
                Key[i]=i
                antiKey[i]=i
            self.__key.append(Key)
            self.__key.append(antiKey)
    
        def enCode(self,p): #加密函数
            self.__apaMsg=p
            m=self.__m
            n=self.__n
            Key=self.__key[0]
            p=p.replace(' ','') #去除空格
            p+=' '*(m-len(p)%m) #末尾补齐
            n=len(p)//m #矩阵列数
            self.__n=n
            M=[p[i*m:(i+1)*m] for i in range(n)] #矩阵生成
            M=[M[i][Key[j+1]-1] for i in range(n) for j in range(m)] #矩阵转换
            M=''.join(M) #列表转换为字符串
            self.__secMsg=M
            return M
        
        def deCode(self,q):
            self.__apaMsg=p
            m=self.__m
            n=self.__n
            Key=self.__key[1]
            M=[q[i*m:(i+1)*m] for i in range(n)]
            M=[M[i][Key[j+1]-1] for i in range(n) for j in range(m)]
            M=''.join(M)
            self.__secMsg=M
            return M
        def Print(self):
            print(self.__m,self.__n,self.__key,self.__apaMsg,self.__secMsg)
    
    if __name__=='__main__':
        m=6
        p="Beijing 2008 Olympic Games"
        s='(143)(56)'
        a=colCode(m)
        a.getKey(s)
        q=a.enCode(p)
        e=a.deCode(q)
        a.Print()
    def main():
        pass
    
    
    展开全文
  • (列置换密码)(Column Permutation Cipher)(含代码)

    前言1-密码学的相关介绍

    密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。
    密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。

    在通信过程中,待加密的信息称为明文,已被加密的信息称为密文,仅有收、发双方知道的信息称为密钥。在密钥控制下,由明文变到密文的过程叫加密,其逆过程叫脱密或解密。在密码系统中,除合法用户外,还有非法的截收者,他们试图通过各种办法窃取机密(又称为被动攻击)或窜改消息(又称为主动攻击)。

    密钥:分为加密密钥和解密密钥。
    明文:没有进行加密,能够直接代表原文含义的信息。
    密文:经过加密处理处理之后,隐藏原文含义的信息。
    加密:将明文转换成密文的实施过程。
    解密:将密文转换成明文的实施过程。
    密码算法:密码系统采用的加密方法和解密方法,随着基于数学密码技术的发展,加密方法一般称为加密算法,解密方法一般称为解密算法。
    直到现代以前,密码学几乎专指加密(encryption)算法:将普通信息(明文,plaintext)转换成难以理解的资料(密文,ciphertext)的过程;解密(decryption)算法则是其相反的过程:由密文转换回明文;加解密包含了这两种算法,一般加密即同时指称加密(encrypt或encipher)与解密(decrypt或decipher)的技术。
    加解密的具体运作由两部分决定:一个是算法,另一个是密钥。密钥是一个用于加解密算法的秘密参数,通常只有通讯者拥有。历史上,密钥通常未经认证或完整性测试而被直接使用在密码机上。
    密码协议(cryptographic protocol)是使用密码技术的通信协议(communication protocol)。近代密码学者多认为除了传统上的加解密算法,密码协议也一样重要,两者为密码学研究的两大课题。在英文中,cryptography和cryptology都可代表密码学,前者又称密码术。但更严谨地说,前者(cryptography)指密码技术的使用,而后者(cryptology)指研究密码的学科,包含密码术与密码分析。密码分析(cryptanalysis)是研究如何破解密码学的学科。但在实际使用中,通常都称密码学(英文通常称cryptography),而不具体区分其含义。
    口语上,编码(code)常意指加密或隐藏信息的各种方法。然而,在密码学中,编码有更特定的意义:它意指以码字(code word)取代特定的明文。例如,以‘苹果派’(apple pie)替换‘拂晓攻击’(attack at dawn)。编码已经不再被使用在严谨的密码学,它在信息论或通讯原理上有更明确的意义。
    在汉语口语中,电脑系统或网络使用的个人帐户口令(password)也常被以密码代称,虽然口令亦属密码学研究的范围,但学术上口令与密码学中所称的钥匙(key)并不相同,即使两者间常有密切的关连。

    传统密码体质

    密码系统图示

    传统密码体质密码系统图示

    密码系统定义

    一个密码系统是一个五元组(P,C,K,E,D),
    P:明文集
    C:密文集
    K:密钥集
    E:加密算法集
    D:解密算法集
    密码学 Cryptography
    加密 Encryption
    解密 Decryption

    前言2-本文列置换密码的介绍

    置换密码(Permutation Cipher)又叫换位密码(Transposition Cipher),其特点就是保持明文的所有字符不变,打乱明文字符的位置和次序。常见的置换密码有两种:列置换密码和周期置换密码。
    本文特点:提供的代码实现了不退出程序框多次使用列置换密码的加解密


    一、列置换密码理论加解密过程

    加密过程

    1.将明文p以设定的固定分组宽度m按行写出,即每行有m个字符;若明文长度不是m的整数倍,则不足部分用双方约定的方式填充(代码使用字符’x’进行填充),如双方约定用空格代替空缺处字符,不妨设最后得字符矩阵[Mp]n×m

    2.按1,2…,m的某一置换σ交换列的位置次序得字符矩阵[Mp]n×m

    3.把矩阵按[Mp]n×m列的顺序依次读出得密文序列c。

    解密过程

    1.将密文c以分组宽度n按列写出得到字符矩阵[Mp]n×m

    2.按加密过程用的置换σ的逆置换σ-1交换列的位置次序得字符矩阵[Mp]n×m

    3.把矩阵[Mp]n×m按1,2…,n行的顺序依次读出得明文p

    举例说明

    列置换密码

    1.加密举例:

    P=abcdefgh,分组宽为m=4,得2行4列矩阵M:
    M=(a b c d
       e f g h)
    设置换x=(1 3)(2 4)
    则M'=(c d a b
          g h e f)
    则密文序列C=cgdhaebf
    

    2.解密举例:

    将密文C以分组宽度m按照写出字符矩阵,的n行m列M';
    按1,2,……,m的逆置换交换列的位置次序,得字符矩阵M;
    将M按行的顺序依次独处明文序列P。
    密文序列C=cgdhaebf
    M'=(c d a b 
        g h e f)
    逆置换x'=(1 3)(2 4)
    M=(a b c d
       e f g h)
    

    二、代码部分

    1.引入库

    代码如下(示例):

    #include<bits/stdc++.h>
    

    2.主函数部分

    代码如下(示例):

        while(!flag)
        {
            int i;
            cout << "*************************" << endl;
            cout << "*********欢迎使用********" << endl;
            cout << "*************************" << endl;
            cout << "       1.选择加密"<< endl;
            cout << "       2.选择解密"<< endl;
            cout << "       3.退出" << endl;
            cout << "*************************" << endl;
            cout << "*********欢迎使用********" << endl;
            cout << "*************************" << endl;
            cin >> i;
            if(i == 3)
            {
                flag = true;
            }else if( i & 1)
            {
                once_encrypt();
            }else
            {
                once_decrypt();
            }
        }
    

    3.整体代码

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e5;
    
    int i,j,l,k,m,num[N];
    char key[N],plantext[N],plantext2[N],cipher[N];
    int cnt;
    bool flag;
    //Multiple column permutation
    
    void do_key()
    {
        l=strlen(key);
    	for(i=0;i<l;i++)
    	{
    		num[i]=0;
    		for(j=0;j<l;j++)
    		{
    
    			if(key[j]<=key[i])
    			{
    
    				num[i]=num[i]+1;
    			}
    			if(key[j]==key[i]&&j>i)
    				num[i]=num[i]-1;
    
    		}
    	}
    }
    
    void do_plaintext()
    {
        k=strlen(plantext);
    	i=0;
    	for(m=k%l;m<l;m++)
    	{
    
    		plantext[k+i]='x';  //空缺补x
    		i++;
    	}
    
    	if(k%l==0)
    		m=k/l;
    	else
    		m=k/l+1;
    }
    
    void encrypt()
    {
        for(i=0;i<m;i++)
    	{
    		for(j=0;j<l;j++)
    		{
    
    				cipher[i*l+j]=plantext[i*l+num[j]-1];
    
    		}
    	}
    	for(i=0;i<l;i++)
    	{
    		for(j=0;j<m;j++)
    		printf("%c",cipher[j*l+i]);
    	}
    	printf("\n");
    }
    
    void decrypt()
    {
        for(i=0;i<m;i++)
    	{
    		for(j=0;j<l;j++)
    		{
    
    				cipher[i*l+j]=plantext[i*l+num[j]-1];
    
    		}
    	}
        for(i=0;i<m;i++)
    	{
    		for(j=0;j<l;j++)
    		{
    
    			plantext2[i*l+num[j]-1]=cipher[i*l+j];
    		}
    	}
    	plantext2[(i-1)*l+j]='\0';
    
    	cout << plantext2 << endl;
    }
    
    void once_encrypt()
    {
        cout << "请输入密钥:" << endl;
    	cin >> key;
    	do_key();
    
    
    	cout << "请输入明文信息:" << endl;
    	cin >> plantext;
    	do_plaintext();
    
    	cout << "加密结果:" << endl;
    	encrypt();
    
    	cout << endl;
    }
    
    void once_decrypt()
    {
        cout << "请输入密钥:" << endl;
    	cin >> key;
    	do_key();
    
    
    	cout << "请输入密文信息:" << endl;
    	cin >> plantext;
    	do_plaintext();
    
    	cout << "解密结果:" << endl;
    	decrypt();
    
    	cout << endl;
    }
    
    
    int main()
    {
        while(!flag)
        {
            int i;
            cout << "*************************" << endl;
            cout << "*********欢迎使用********" << endl;
            cout << "*************************" << endl;
            cout << "       1.选择加密"<< endl;
            cout << "       2.选择解密"<< endl;
            cout << "       3.退出" << endl;
            cout << "*************************" << endl;
            cout << "*********欢迎使用********" << endl;
            cout << "*************************" << endl;
            cin >> i;
            if(i == 3)
            {
                flag = true;
            }else if( i & 1)
            {
                once_encrypt();
            }else
            {
                once_decrypt();
            }
        }
    	return 0;
    }
    

    4.使用流程

    将代码复制进C++运行环境即可编译运行


    总结

    今天上午听了密码学的列置换密码的部分课程,想用代码实现一下。
    本文介绍了密码学中的(列置换密码)(Column Permutation Cipher)(含代码),并且进行了代码的实现,读者可运行代码进行操作。

    参考资料

    [1]百度百科-密码学

    展开全文
  • 置换密码加密解密

    万次阅读 2018-12-19 21:27:34
    Java实现置换密码代码 代码 分组长度为7 加密顺序为{5, 3, 2, 0, 6, 4, 1} package com.jingfei.Encryptoin; import java.util.Scanner; public class ZhiHuan { public static void main(String[] args) { ...
  • 要求用户插入要求加密的消息以及数字形式的加密密钥,然后代码将返回密文。
  • 自己写的 呵呵 希望支持 信息安全 古典加密算法------置换密码 古典加密算法------代换密码------乘数密码
  • 置换密码加密解密过程,设明文为:4D 61 65 53 2D 4F 69 20 4E。密钥为8,1,6,3,5,7,4,9,2。求加密后的16进制密文。先思考和描述算法,也就是对明文4D 61 65 53 2D 4F 69 20 4E实现置换8,1,6,3,5,7,4,9,2。
  • 替代密码和置换密码的C语言实现剖析实验一一、实验名称:替代密码和置换密码的实现二、实验目的:通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定基础。三、实验内容...
  • 用C++实现置换密码加密解密算法

    热门讨论 2012-04-09 20:52:37
    用C++实现置换密码加密解密算法,此文档为实现代码
  • 置换密码 代码如下: #置换密码 a = input('请输入明文:') print("逆序后的密文为:",a[::-1]) 结果如图: 代码如下: #栅栏技术(栏数为7) a = input('请输入明文:') b = [] c = [] b.extend(a) len = len(b...
  • 周期置换密码加密操作原理

    千次阅读 2021-03-15 17:44:23
    置换密码: 是指把明文中各字符的位置序列重新排列来得到密文的一种密码体制。 加密方法: 把明文字符以固定的宽度m(分组长度)水平地(按行)写在一张纸上(如果最后一行不足m,则需要补充固定字符),再按垂直方向...
  • 密码

    2021-05-26 02:44:57
    实验一 古典密码算法实验一、实验目的(1)掌握密码学基础知识,包括明文、密文、密钥、加密和...二、实验内容编程实现移位密码、维吉尼亚密码、周期置换密码、列置换密码算法,分别用这些加密算法对文本数据进行加...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼/*Turbo2.0pass.givefileapassword!*/#include#include#include#includevoiddofile(char*in_fname,char*.../*对文件进行加密的具体函数*/voidmain(intargc,char*argv[])/...
  • 换位密码加密

    2019-01-07 22:36:34
    换位密码,令b=4,每个分组4个字符,明文消息proceed meeting..
  • 置换密码 古典密码算法

    热门讨论 2011-11-21 23:08:48
    置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照...
  • 是使用C语言写的,可以实现凯撒加密置换加密。程序已经运行过,下载后直接运行就可以了。
  • https://moriarty98.github.io/2019/06/09/%E7%BB%B4%E5%90%89%E5%B0%BC%E4%BA%9A%E8%A1%A8%E5%92%8C%E5%88%97%E7%BD%AE%E6%8D%A2%E7%BB%93%E5%90%88%E5%8A%A0%E5%AF%86/ 我将整个完整的实现过程发布在了我的博客...
  • 通过编程实现Column permutation加密,更加深入的了解其原理,掌握Column permutation算法。 步骤: (1) 输入密钥 (2) 排出密钥中字母的顺序 (3) 输入明文 (4) 按密钥中字母的顺序打乱明文顺序 ...
  • C语言置换密码

    千次阅读 2020-09-02 18:34:22
    置换密码:将明文按照密钥的长度为一行排成矩阵,不足用其他字符补齐,再按密钥的顺序重新排列每一,按竖排读出得到密文 例子: 明文:Beijing2008OlympicGames 密钥:421365 用$补齐矩阵 明文的矩阵: B e i j i ...
  • 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给的顺序安排在一个...
  • 帮助学生掌握置换密码加密解密过程,能够利用所学过的编程语言,熟悉加密算法流程与编程实现加密算法。使学生掌握编程实现实际问题中的方法,提高专业技能和专业素养。 要求学生掌握算法的程序实现的方法,能应用...
  • 置换密码的c++实现程序

    热门讨论 2011-03-26 15:00:01
    古典密码体系中最基本的一种密码机制,使用c++设计完成

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,878
精华内容 1,151
关键字:

列置换密码加密