- 置换密码
代码如下:
#置换密码
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 = ' ')
结果如图: