class Caesar: def __init__(self): a = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,.-!\'"') b = a[3:] + a[:3] self.emap = dict(zip(a,b)) self.dmap = dict(zip(b,a)) def encode(self, text): tmp = [ (x in self.emap and self.emap[x] or x) for x in text ] return ''.join(tmp) def decode(self, text): tmp = [ (x in self.dmap and self.dmap[x] or x) for x in text ] return ''.join(tmp)
#include stdio.h
#include stdlib.h
#include string.h
const int MAX_N=200;
int main(int argc, char *argv[])
{
int i,j,p;
char text[MAX_N];
char alphabet[30];
char op[10];
while(1)
{
printf("1---输入密码表 2---退出\n");
gets(op);
if(strcmp(op,"1")==0)
{
printf("密码表:");
gets(alphabet);
while(1)
{
printf("1---加密 2---解密 3---返回\n");
gets(op);
if(strcmp(op,"1")==0 ||strcmp(op,"2")==0 )
{
printf("输入文本:");
gets(text);
for(i=0;text[i]!='\0';i++)
{
if((text[i]='a'text[i]='z') || (text[i]='A'text[i]='Z') )
{
if(strcmp(op,"1")==0)
{
p=text[i]='a'? (text[i]-'a'):(text[i]-'A');
text[i]=text[i]+ alphabet[p]-(p+'A');
}
else
{
for(j=0;;j++)
if(alphabet[j]==text[i]||alphabet[j]==(text[i]-('a'-'A')))
break;
text[i]= text[i]='a' ? (j+'a') :(j+'A');
}
}
}//for(i)
if(strcmp(op,"1")==0)
printf("加密后的文本为:" );
else
printf("解密后的文本为:");
printf("%s\n\n",text);
}
else if(strcmp(op,"3")==0)
{
printf("\n");
break;
}
else
{
printf("选择有误!请重新选择!\n");
}
}//while(1)
}
else if(strcmp(op,"2")==0)
{
exit(1);
}
else
{
printf("选择有误!请重新选择!\n");
}
}
return 0;
}
/*
输入样例
QWERTYUIOPASDFGHJKLZXCVBNM
Welcome to ZZSY2009!
输出样例
Vtsegdt zg MMLN2009!
*/
凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。
因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq” 。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位 变为“Hello” 。这里,移动的位数“2”是加密和解密所用的密钥。
该程序既可用于加密又可用于解密。只要传入明文和偏移量即可加密,解密需要传入密文和负的偏移量就可以解密。
输出的结果:
凯撒密码由于加解密比较简单,密钥总共只有 26 个,攻击者得到密文后即使不知道密钥,也可一个一个地试过去,最多试 26 次就可以得到明文。
这里不光根据 offset 偏移进行加密,还加上了字符所在的下标进行混合加密。
输出的结果:
1、猪圈密码(亦称朱高密码、共济会暗号、共济会密码或共济会员密码),是一种以格子为基础的简单替代式密码。即使使用符号,也不会影响密码分析,亦可用在其它替代式的方法。
2、恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
3、标准银河字母是一个简单的替代暗号,用不同的符号取代拉丁字母。SGA可以在不同的语言中使用,比如在游戏《Minecraft》,《指挥官基恩》中。
扩展资料:
1、猪圈密码优缺点:
优点:简单,方便,容易书写,适合书面上的密码通讯,并且好记。
缺点:"太出名"密码最怕的就是太出名,一但出名它就会毫无秘密可言,知道的人就知道,不知道的人就不知道。
2、凯撒密码例子:
恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ ;
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC。
使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG ;
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ。
3、标准银河字母附魔语言:
Minecraft附魔台魔咒的名字是从一长串的单词中随机构成的。先从以下列表中选取三到五个词互相组合生成魔咒名字,然后使用SGA显示出来。注意,这些名字实际上没有任何意义,且不会和物品一起保存,它们只显示在附魔台的界面上。
参考资料来源:百度百科-猪圈密码
参考资料来源:百度百科-凯撒密码
参考资料来源:百度百科-标准银河字母