我觉得创建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);
}
1、恺撒加密computer后是iusvazkx~其实恺撒加密就是按26个字母的顺序往后推密钥个字母~~~
2、维吉尼亚法加密,密钥:KEYWORD,原文:WANGLUO ANQUAN,加密后密文就是:GELCZLRKROQOE
根据苏维托尼乌斯的记载,恺撒曾用此方法对重要的军事信息进行加密: 如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第4个字母置换第一个字母,即以D代A,余此类推。
同样,奥古斯都也使用过类似方式,只不过他是把字母向右移动一位,而且末尾不折回。每当他用密语写作时,他都用B代表A,C代表B,其余的字母也依同样的规则;用A代表Z。
扩展资料:
密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。因据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。这是一种简单的加密方法,这种密码的密度是很低的,只需简单地统计字频就可以破译。 现今又叫“移位密码”,只不过移动的为数不一定是3位而已。
参考资料来源:百度百科-凯撒密码
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。我对“怎么用凯撒密码加密一句中文”产生了疑问,实际上解决方法可以有很多种,例如用数组中不断地“大、风、方……”这些词的简单位移,事实上经过搜索,我选择了使用的变换来完成。即,可以用汉字对应的字符码来进行变换操作,这样出来的还是汉字。比如汉字“一”是0x4e00,凯撒移位为1的话0x4e00+1=0x4e01,对应的汉字是“丁”,如果移位为三,就是0x4e03,对应汉字是“七”。将汉字范围内的整型转换为16进制字符串作为后缀,前面加入\u,形成对应的unicode值。这段代码并不复杂,遇到的问题在于:当我在main函数调用时,注释掉的该行(如下)不能够实现我把转义字符\去掉,即最后输出的是\u593a这种形式,而非unicode值对应的“太”。只要把得到的报文中的“\”换成“\”,我想就能正常地将Unicode输出成中文了,首先想到的是使用字符串的方法。使用(“\\“,“\“),但是发现输出结果没有任何变化。 解决方法是:查了下API文档,方法的定义是:public String replaceAll( String regex,String replacement) 。
可以用古典密码进行加密
古典密码 常用的有凯撒加密等等
要好理解的话 我说一下吧
比如 明文 abcd 密钥 5 密文 efgh 就是将字母顺序向右移动五位(位移5)
现在用 凯撒密码 加密一句话 i love you
密文为n qtaj dtz
还有一个 反字母表加密
字母表 abcdefghijklmnopqrstuvwxyz
反字母表 zyxwvutsrqponmlkjihgfedcba
比如 abcdefg 加密后为 stuvwyz
Function Caesar(str, offset)
Dim length, char, i
Caesar = ""
length = Len(str)
For i = 1 To length
char = Mid(str, i, 1)
If char = "A" And char = "Z" Then
char = Asc("A") + (Asc(char) - Asc("A") + offset) Mod 26
Caesar = Caesar Chr(char)
ElseIf char = "a" And char = "z" Then
char = Asc("a") + (Asc(char) - Asc("a") + offset) Mod 26
Caesar = Caesar Chr(char)
Else
Caesar = Caesar char
End If
Next
End Function
inputbox "密文:","凯撒密码",Caesar("i love you", 5)
'"i love you" 是要加密的字符串;5是字母的位移数
Input=Inputbox("输入字符加解密","反字母表加解密")
If Input="" Then Wscript.quit
For i = 1 To Len(LCase(Input))
If Mid(LCase(Input), i, 1) = "a" Then Output = Output "z"
If Mid(LCase(Input), i, 1) = "b" Then Output = Output "y"
If Mid(LCase(Input), i, 1) = "c" Then Output = Output "x"
If Mid(LCase(Input), i, 1) = "d" Then Output = Output "w"
If Mid(LCase(Input), i, 1) = "e" Then Output = Output "v"
If Mid(LCase(Input), i, 1) = "f" Then Output = Output "u"
If Mid(LCase(Input), i, 1) = "g" Then Output = Output "t"
If Mid(LCase(Input), i, 1) = "h" Then Output = Output "s"
If Mid(LCase(Input), i, 1) = "i" Then Output = Output "r"
If Mid(LCase(Input), i, 1) = "j" Then Output = Output "q"
If Mid(LCase(Input), i, 1) = "k" Then Output = Output "p"
If Mid(LCase(Input), i, 1) = "l" Then Output = Output "o"
If Mid(LCase(Input), i, 1) = "m" Then Output = Output "n"
If Mid(LCase(Input), i, 1) = "n" Then Output = Output "m"
If Mid(LCase(Input), i, 1) = "o" Then Output = Output "l"
If Mid(LCase(Input), i, 1) = "p" Then Output = Output "k"
If Mid(LCase(Input), i, 1) = "q" Then Output = Output "j"
If Mid(LCase(Input), i, 1) = "r" Then Output = Output "i"
If Mid(LCase(Input), i, 1) = "s" Then Output = Output "h"
If Mid(LCase(Input), i, 1) = "t" Then Output = Output "g"
If Mid(LCase(Input), i, 1) = "u" Then Output = Output "f"
If Mid(LCase(Input), i, 1) = "v" Then Output = Output "e"
If Mid(LCase(Input), i, 1) = "w" Then Output = Output "d"
If Mid(LCase(Input), i, 1) = "x" Then Output = Output "c"
If Mid(LCase(Input), i, 1) = "y" Then Output = Output "b"
If Mid(LCase(Input), i, 1) = "z" Then Output = Output "a"
If Mid(LCase(Input), i, 1) = " " Then Output = Output " "
Next
Msgbox Output,0,"反字母表加解密"
凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。
因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq” 。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位 变为“Hello” 。这里,移动的位数“2”是加密和解密所用的密钥。
该程序既可用于加密又可用于解密。只要传入明文和偏移量即可加密,解密需要传入密文和负的偏移量就可以解密。
输出的结果:
凯撒密码由于加解密比较简单,密钥总共只有 26 个,攻击者得到密文后即使不知道密钥,也可一个一个地试过去,最多试 26 次就可以得到明文。
这里不光根据 offset 偏移进行加密,还加上了字符所在的下标进行混合加密。
输出的结果: