凯撒密码:明文中的所有字母都在字母表上向后进行偏移后替换成偏移后的密文 偏移量通常是3 AA=z 例如:所有的字母A将被替换成D,B变成E,以此类推
但是凯撒密码还有其它种类有: 偏移量为10 称做 Avocat(AK)
偏移量为13 称做 ROT13
偏移量为-5 称做 Cassis (K 6)
偏移量为-6 称做 Cassette (K 7)
栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话) 比较复杂
我觉得创建26个文件实在太冗杂了。其实一个就够了,因为随着你的选择的改变(比如以9为加密条件,所有字母循环后移9位),目标文件里面的内容就自动更新了。
当然你也可以使用函数 int create(char *filename , int mode) 在执行框里手动输入像 e:\\original.txt 这样的地址字符,但你想象一下,这是不是很麻烦?
在实际加密中,可使用随机函数 rand()产生循环后移位数,而且完全可以不限制在26位,扩展ASCII码可以产生成千上万的字符,将文件加密到那些几乎无规律,难以识别的字符上,安全性就提高了许多。当然还有什么多轮加密之类的。可以自己慢慢摸索,挺有趣的。祝你好运!
修改如下(已成功执行):
#includestdio.h
#includestdlib.h
char encrypt(char ch,int n)/*加密函数,把字符向右循环移位n*/
{
while(ch='A'ch='Z')
{
return ('A'+(ch-'A'+n)%26);
}
while(ch='a'ch='z')
{
return ('a'+(ch-'a'+n)%26);
}
return ch;
}
void main()
{
FILE *in,*out;
char ch1,ch2;
int i;
printf("Please input the number(1~26) you want to use for encrypt:");
scanf("%d",i);
if((in=fopen("e:\\original.txt","r"))==NULL) /*文件名根据自己建立的位置修改,
我建在e盘的根目录下
{
printf("Can not open this file!\n");
exit(0);
}
if((out=fopen("e:\\encrypt.txt","w"))==NULL) //同上
{
printf("Can not open this file!\n");
exit(0);
}
while(!feof(in)){
if((ch1=fgetc(in))!=EOF)
ch2=encrypt(ch1,i);
fputc(ch2,out);
}
printf("Encrypt is over!\n");
fclose(in);
fclose(out);
}
可以先统计字母的频率,确定几个字母,只要有几个字母被解出来,那就很简单了。毕竟凯撒密码的规律性太强了。
它是一种代换密码。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。
在人类历史上,对信息保护的需求与对信息本身的需求一样久远。第一个用于加密和解密文本的编码方式是凯撒密码。由于原始的凯撒密码较简单,较易被破解。随着考古的进展,人们发现了升级版的凯撒密码II。
凯撒密码II通过查询动态密码表,把凯撒单词加密成一些密文数字。
如果请你使用现有动态密码表,加密一些单词。你要处理m个操作,操作分成两种:
A string integer: 增加一条凯撒单词string到凯撒密文数字integer的映射规则,如果先前已经有关于这个string的规则,那么用该规则替换原规则。
Q string: 查询单词string所对应的最新密文数字。
第一行一个整数m(1≤ m≤1,000,000),表示有m个操作。
单词仅有长度不超过8位的小写字母组成,单词总数不超过100,000个。
密文数字的范围是[0..1,000,000,000]。
对于每组查询,输出一行,表示根据密码表中的规则,加密后的密文数字,如果在无法在密码表中查找到该单词,输出 -1。
7 A aaab 10 A aaac 20 A aaad 30 Q aaac A aaac 40 Q aaaa Q aaac
20
-1
40