我觉得创建26个文件实在太冗杂了。其实一个就够了,因为随着你的选择的改变(比如以9为加密条件,所有字母循环后移9位),目标文件里面的内容就自动更新了。
当然你也可以使用函数 int create(char filename , int mode) 在执行框里手动输入像 e:\\originaltxt 这样的地址字符,但你想象一下,这是不是很麻烦?
在实际加密中,可使用随机函数 rand()产生循环后移位数,而且完全可以不限制在26位,扩展ASCII码可以产生成千上万的字符,将文件加密到那些几乎无规律,难以识别的字符上,安全性就提高了许多。当然还有什么多轮加密之类的。可以自己慢慢摸索,挺有趣的。祝你好运!
修改如下(已成功执行):
#include<stdioh>
#include<stdlibh>
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:\\originaltxt","r"))==NULL) /文件名根据自己建立的位置修改,
我建在e盘的根目录下
{
printf("Can not open this file!\n");
exit(0);
}
if((out=fopen("e:\\encrypttxt","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,那对英文单词book这个单词加密,结果就是相应的每个字母在字母表中的序号减去1,比如b在英文单词里排第二位,那加密后就是a,o加密后就是n,依此类推,book加密后就是annj,解密时每个字母的顺序号加1,所对应的字母就是密文。
import javautilScanner;
public class Caesar {
private final static char UPPERLASTCHAR = 'Z';
private final static char LOWERLASTCHAR = 'z';
private final static char UPPERFIRSTCHAR = 'A';
private final static char LOWERFIRSTCHAR = 'a';
public static String cipher(String encodeString, int shift) {
int i;
String result = "";
for (i = 0; i < encodeStringlength(); i++) {
char ch = (char) (encodeStringcharAt(i) + shift);
char first = ch >= 'a' && ch <= 'z' LOWERFIRSTCHAR : UPPERFIRSTCHAR;
char last = ch >= 'a' && ch <= 'z' LOWERLASTCHAR : UPPERLASTCHAR;
if( ch > last)
ch = (char) (ch % last + first - 1);
result += ch ;
}
return result;
//abcdefghijklmnopqrstuvwxyz 3
//ABCDEFGHIJKLMNOPQESTUVWXYZ 3
}
public static void main(String[] args) {
Scanner in = new Scanner(Systemin);
String xx;
int shift;
xx = innext();
shift = innextInt();
Systemoutprintln(cipher(xx, shift));
}
}
这个程序,允许输入一串小写英文,如:goodbey,然后将它们变成密码:jrrgehb。
变换规律是:按照英文字母表,明文字母向下第三个,就是密码。
见插图。
char M[100]; //明文、密码的存放空间
char C[100];
int K = 3, i; //K=3, 向下第三个
printf("请输入明文M(注意不要输入空白串)\n"); //显示
gets(M); //输入
for(i=0;M[i]!='\0';i++) //逐个字母进行变换
C[i]=(M[i]-'a'+K)%26+'a'; //加密计算公式
C[i]='\0'; //密码末尾加上终止符号
printf("结果是:\n%s\n",C); //显示密码
数据加密标准DES
数据加密标准DES原是IBM公司于1972年研制成功的,目的在于保护公司的机密产品。美国商业部所属国家标准局NBS也开始了一项计算机数据保护标准的发展规划,这一举措导致了DES的出台,并于1977年正式批准作为美国联邦信息处理标准。该标准在国际上引起极大重视,ISO也将DES指定为数据加密标准。
DES是一个分组加密算法,它所使用的密钥长度为64位,由占56位长度的实际密钥和每个字节的第8位的奇偶校验码这两部分组成。它以64位为一组,将明文分成若干个分组,每次利用56位密钥对64位的二进制明文分组进行数据加密,产生64位的密文。DES算法的密钥可以是任意的一个56位的数,且可在任意的时候改变。DES算法整个加密处理过程需经16轮(round)的运算。每一轮运算
替代加密法
替代加密算法是将明文中的每一个字符用另一个字符替换为密文中的一个字符。除接受者外,其他人不理解其间的替代。接受者对密文作反向替换后恢复成明文。
著名的凯撒加密算法就是一种简单的替代加密法,它是将明文中每一个字符用右移3位并以26个字符为模的替代(A由D替代,B由E替代,··…—,W由Z替代,X由A替代,Y由B替代,Z由C替代)。
#include<stdioh>
#include<stdlibh>
int main()
{
char x;
while(1)
{
x=getchar();
if(x=='\n') break;
printf("%c",x+4);
}
printf("\n");
return 0;
}
我试了一下,大概就是这样,望采纳
以上就是关于凯撒密码全部的内容,包括:凯撒密码、网络安全凯撒密码的计算方法。、怎么用凯撒加密法对一段控制台接受的字符串加密(运用java方面的知识)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!