• 置换密码

    代码如下:
#置换密码
a = input('请输入明文:')
print("逆序后的密文为:",a[::-1])
	结果如图:



代码如下:

#栅栏技术(栏数为7)
a = input('请输入明文:')
b = []
c = []
b.extend(a)
len = len(b)
for i in range(7):
    c.extend(b[i:len:7])
print('栏数为7的密文为:')
for temp in c:
    print(temp,end = '')
print("\n")
	结果如图:



注意:加密的时候要把明文补成方阵,缺少字符的地方用空格占位,密文中也带有空格,否则该密文无法正确解密。(代码已做修改)
代码如下:

#include <iostream>
#include<bits/stdc++.h>
using namespace std;

int main()
{
    string s;
    int len;
    cout<<"请输入明文:"<<endl;
    getline(cin,s);
    len = s.length();
    char a[100][100];
    for(int i = 0; i < 100 ;i++)        //初始化一个100x100,值都为*的二维矩阵
    {
        for(int k = 0; k < 100;k++)
        {
            a[i][k] = '*';
        }
    }

    int j = 0,k = 0;
    int width = 5;  //设置默认宽度为5
    for(int i = 0; i < len ;i++)    //将输入的字符串存储在二维数组a[]里面,并去除空格
    {
        if(s[i] != ' ')
        {
            a[j][k] = s[i];
            k++;
            if(k >= width)
            {
                k = k % width;
                j++;
            }
        }
    }
    j++;
    cout<<"列值为"<<width<<"的矩阵是:"<<endl;
    for(int i = 0; i < j ;i++)
    {
        for(int k = 0; k < width;k++)
        {
            if (a[i][k] != '*')
            {
                cout<<a[i][k];
            }
        }
        cout<<endl;
    }
    cout<<"列置换后的密文为:"<<endl;
    for(int k = 0; k < width;k++)       //输出列置换后的密文
    {
        for(int i = 0; i < j ;i++)
        {
            if (a[i][k] != '*')
            {
                printf("%c",a[i][k]);
            }
            else{
                printf(" ");
            }
        }
    }

    return 0;
}


	结果如图

  • 代替密码

    代码如下:
#Caesar密码(加法加密)
def encode(b,k):            #加密函数
    c = []
    for temp in b:
        if temp != ' ':
            if ord(temp)+k > ord('Z'):
                c.extend(chr((ord(temp)+k)-26))
            else:
                c.extend(chr(ord(temp)+k))
    return c
def decode(b,k):            #解密函数
    c = []
    for temp in b:
        if temp != ' ':
            if ord(temp)-k < ord('A'):
                c.extend(chr((ord(temp)-k)+26))
            else:
                c.extend(chr(ord(temp)-k))
    return c

a = input('请输入明文:\n')
k = int(input('请输入移位值:'))
b = []
b.extend(a)
len = len(b)
en = []
en = encode(b,k)
print("经过"+str(k)+"移位后的密文为:")
for temp in en:
    print(temp,end = ' ')
de = decode(en,k)
print("\n经过"+str(k)+"移位还原得到的明文为:")
for temp in de:
    print(temp,end = ' ')
	结果如图



代码如下:

#Caesar密码(乘法加密)
#print(ord('A'))  #65
#print(ord('Z'))  #90

def judge(a,b):             #判断两个数是否互质
    temp = 0
    while(b != 0):
        temp = b;
        b = a % b
        a = temp
    if(a == 1):
        return True
    else:
        return False

B = 26
while(True):
    A = int(input("请输入一个与26互素的正整数:"))
    if(judge(A,B)):
        break;
    else:
        print("您输入的数字不符合要求,请按要求输入。")
a = input('请输入明文:\n')
info = {}
j = 0
for i in range(len(a)):
    if(a[i] != ' '):
        info[j] = a[i]
        j += 1
print("K值为"+str(A)+"乘法加密的密文为:")
for i in range(B):
    print(info[(i*A)%26],end = ' ')
	结果如图:

更多推荐

c++、python实现置换密码(栅栏技术,列置换)、替代密码(加法密码(Caesar密码),乘法密码)