凱撒在線加密
⑴ ACM凱撒密碼加密
#include<stdio.h>
intmain()
{
intN;
charc;
scanf("%d",&N);
c=getchar();//這里把N之後的回車吃掉
while((c=getchar())!=' ')//採用這種讀入方式
{
if(c>='A'&&c<='Z')
{
if(c+N>'Z'&&c<='Z')//這里是c+N>'Z',否則W會出錯
c=c-(26-N);
elsec=c+N;
}
printf("%c",c);
}
printf(" ");
return0;
}
參考修改後的代碼哈,歡迎交流,滿意請採納。
⑵ 給我凱撒密碼的方法
恩~ 你都給了明文和密鑰…不知道你還要什麼方法啊?
如果你不知道凱撒,可以去網路一下,我給你簡單說一下吧~
英文26個字母(不分大小寫)可以由數字01~26來代替(有人也用00~25來代替,不過不常見~)
凱撒全稱叫凱撒位移加密法,顧名思義啊~
比如A是01,你用n=4加密之後就是01+4=05,05在字母表裡是E,所以A加密之後就是E~
CHINA用n=4加密之後就是GLMRI~ 明白沒?
對了,需要說明一下,上面舉的例子是字母表向右移動4位,n=4也可以理解為向左移動4位,那麼CHINA加密之後就變成YDEJW~ 不過不用擔心,一般情況下都是向右移的,當然也不排除某些變態向左移(強烈鄙視這種人!!!)…
恩~ 廢話說了好多,給你密文吧~說明一下,我是用01~26和右移的方法加密的~
Glmri Girwvep Vehms erh XZ Yrmzivwmxc~ 完畢~(我加的有點快,不保證全對,你自己檢查一下哈~)
再補一句,字母表可以循環用的,比如Z用完了就回到ABC…,這時候A就相當於27~ 明白否?
嘿嘿… 我腹黑一下下~ 如果你想用密碼去虐一個人的腦細胞的話,推薦你用00~25和左移的方法,保證他能死至少一半的腦細胞~
嘿嘿嘿嘿……
⑶ 怎麼用凱撒密碼加密一句中文
凱撒密碼作為一種最為古老的對稱加密體制,在古羅馬的時候都已經很流行,他的基本思想是:通過把字母移動一定的位數來實現加密和解密。明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例如,當偏移量是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) 。
⑷ 愷撒密碼的凱撒密碼II
在人類歷史上,對信息保護的需求與對信息本身的需求一樣久遠。第一個用於加密和解密文本的編碼方式是凱撒密碼。由於原始的凱撒密碼較簡單,較易被破解。隨著考古的進展,人們發現了升級版的凱撒密碼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
⑸ 凱撒加密問題(c)請教大家哪裡出錯
原因在於scanf讀取choice時,你輸入的那個回車符沒有被讀取。然後接下來的case裡面,getchar()讀取的字元就是那個害死人的回車符'\n'。這是個老問題了,呵呵。希望你能從這個問題裡面領悟到scanf之類的函數的工作原理。其實他們就是一種將字元串轉化為預定義數據的函數。用戶輸入總是字元串,不是嗎?
好吧,還是我幫你打一下吧。
/* 2011-11-14, 10:37 , 被 hoxily 修改。
* 愷撒加密。
*/
#include <stdio.h>
int main(void)
{
int choice;
char ch;
printf("1.加密 2.解密 3.退出\n");
scanf("%d",&choice);
/* 注意這里 */
getchar();
/* 讀掉那個'\n'字元 */
switch(choice)
{
case 1:
printf("輸入需加密的字元串(僅限a~z):");
ch=getchar();
while(ch!='\n')
{
/* if(ch>='a'&& ch<'z') */
/* 這句也不對,沒有包含'z' */
if('a'<=ch && ch<='z')
ch='a'+(ch-'a'+3)%26;
putchar(ch);
ch=getchar();
}
break;
case 2:
printf("輸入需解密的字元串:");
ch=getchar();
while(ch!='\n')
{
/* if(ch>='a'&& ch<'z') */
/* 理由同上 */
if('a'<=ch && ch<='z')
/* ch='a'+(ch-'a'-3)%26; */
/* 注意這里%運算要保證被除數是非負數 */
/* 你之前的寫法,輸入'a'進行解密,結果是'^' */
ch='a'+(ch-'a'-3+26)%26;/* 加上個模不影響%的結果 */
putchar(ch);
ch=getchar();
}
break;
}
return 0;
}
/*
測試結果:
1.加密 2.解密 3.退出
1
輸入需加密的字元串(僅限a~z):
any key to continue
1.加密 2.解密 3.退出
2
輸入需解密的字元串:
Press any key to continue
1.加密 2.解密 3.退出
3
Press any key to continue
*/
⑹ 將凱撒密碼X的加密、解密過程用C語言編程實現
1、在密碼學中,愷撒密碼(或稱愷撒加密、愷撒變換、變換加密)是一種最簡單且最廣為人知的加密技術。它是一種替換加密的技術,明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例如,當偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推。這個加密方法是以愷撒的名字命名的,當年愷撒曾用此方法與其將軍們進行聯系。愷撒密碼通常被作為其他更復雜的加密方法中的一個步驟,例如維吉尼爾密碼。愷撒密碼還在現代的ROT13系統中被應用。但是和所有的利用字母表進行替換的加密技術一樣,愷撒密碼非常容易被破解,而且在實際應用中也無法保證通信安全。例子愷撒密碼的替換方法是通過排列明文和密文字母表,密文字母表示通過將明文字母表向左或向右移動一個固定數目的位置。
2、kaiser加密演算法具體程序:
#include<stdio.h>
#include<conio.h>
charencrypt(charch,intn)/*加密函數,把字元向右循環移位n*/
{
while(ch>='A'&&ch<='Z')
{
return('A'+(ch-'A'+n)%26);
}
while(ch>='a'&&ch<='z')
{
return('a'+(ch-'a'+n)%26);
}
returnch;
}
voidmenu()/*菜單,1.加密,2.解密,3.暴力破解,密碼只能是數字*/
{
clrscr();
printf(" =========================================================");
printf(" 1.Encryptthefile");
printf(" 2.Decryptthefile");
printf(" 3.Forcedecryptfile");
printf(" 4.Quit ");
printf("========================================================= ");
printf("Pleaseselectaitem:");
return;
}
main()
{
inti,n;
charch0,ch1;
FILE*in,*out;
charinfile[20],outfile[20];
textbackground(BLACK);
textcolor(LIGHTGREEN);
clrscr();
sleep(3);/*等待3秒*/
menu();
ch0=getch();
while(ch0!='4')
{
if(ch0=='1')
{
clrscr();
printf(" Pleaseinputtheinfile:");
scanf("%s",infile);/*輸入需要加密的文件名*/
if((in=fopen(infile,"r"))==NULL)
{
printf("Cannotopentheinfile! ");
printf("Pressanykeytoexit! ");
getch();
exit(0);
}
printf("Pleaseinputthekey:");
scanf("%d",&n);/*輸入加密密碼*/
printf("Pleaseinputtheoutfile:");
scanf("%s",outfile);/*輸入加密後文件的文件名*/
if((out=fopen(outfile,"w"))==NULL)
{
printf("Cannotopentheoutfile! ");
printf("Pressanykeytoexit! ");
fclose(in);
getch();
exit(0);
}
while(!feof(in))/*加密*/
{
fputc(encrypt(fgetc(in),n),out);
}
printf(" Encryptisover! ");
fclose(in);
fclose(out);
sleep(1);
}
if(ch0=='2')
{
clrscr();
printf(" Pleaseinputtheinfile:");
scanf("%s",infile);/*輸入需要解密的文件名*/
if((in=fopen(infile,"r"))==NULL)
{
printf("Cannotopentheinfile! ");
printf("Pressanykeytoexit! ");
getch();
exit(0);
}
printf("Pleaseinputthekey:");
scanf("%d",&n);/*輸入解密密碼(可以為加密時候的密碼)*/
n=26-n;
printf("Pleaseinputtheoutfile:");
scanf("%s",outfile);/*輸入解密後文件的文件名*/
if((out=fopen(outfile,"w"))==NULL)
{
printf("Cannotopentheoutfile! ");
printf("Pressanykeytoexit! ");
fclose(in);
getch();
exit(0);
}
while(!feof(in))
{
fputc(encrypt(fgetc(in),n),out);
}
printf(" Decryptisover! ");
fclose(in);
fclose(out);
sleep(1);
}
if(ch0=='3')
{
clrscr();
printf(" Pleaseinputtheinfile:");
scanf("%s",infile);/*輸入需要解密的文件名*/
if((in=fopen(infile,"r"))==NULL)
{
printf("Cannotopentheinfile! ");
printf("Pressanykeytoexit! ");
getch();
exit(0);
}
printf("Pleaseinputtheoutfile:");
scanf("%s",outfile);/*輸入解密後文件的文件名*/
if((out=fopen(outfile,"w"))==NULL)
{
printf("Cannotopentheoutfile! ");
printf("Pressanykeytoexit! ");
fclose(in);
getch();
exit(0);
}
for(i=1;i<=25;i++)/*暴力破解過程,在察看信息正確後,可以按'Q'或者'q'退出*/
{
rewind(in);
rewind(out);
clrscr();
printf("========================================================== ");
printf("Theoutfileis: ");
printf("========================================================== ");
while(!feof(in))
{
ch1=encrypt(fgetc(in),26-i);
putch(ch1);
fputc(ch1,out);
}
printf(" ======================================================== ");
printf("Thecurrentkeyis:%d ",i);/*顯示當前破解所用密碼*/
printf("Press'Q'toquitandotherkeytocontinue...... ");
printf("========================================================== ");
ch1=getch();
if(ch1=='q'||ch1=='Q')/*按'Q'或者'q'時退出*/
{
clrscr();
printf(" GoodBye! ");
fclose(in);
fclose(out);
sleep(3);
exit(0);
}
}
printf(" Forcedecryptisover! ");
fclose(in);
fclose(out);
sleep(1);
}
menu();
ch0=getch();
}
clrscr();
printf(" GoodBye! ");
sleep(3);
}
⑺ 什麼是凱撒加密法
簡單的說,就是位移加密。
比如你的密碼是ABCDE
然後設置凱撒密碼的偏移量為3的話
那加密之後的密碼就是DEFGH
⑻ 凱撒加密法
凱撒加密法的替換方法是通過排列明文和密文字母表,密文字母表示通過將明文字母表向左或向右移動一個固定數目的位置。例如,當偏移量是左移3的時候(解密時的密鑰就是3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
使用時,加密者查找明文字母表中需要加密的消息中的每一個字母所在位置,並且寫下密文字母表中對應的字母。需要解密的人則根據事先已知的密鑰反過來操作,得到原來的明文。例如:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
凱撒加密法的加密、解密方法還能夠通過同餘的數學方法進行計算。首先將字母用數字代替,A=0,B=1,...,Z=25。此時偏移量為n的加密方法即為:
En(x)=(x+n)mod26{\displaystyle E_{n}(x)=(x+n)\mod 26}
解密就是:
Dn(x)=(x−n)mod26{\displaystyle D_{n}(x)=(x-n)\mod 26}
⑼ C語言的凱撒加密
/*
和樓上的相比,或許 看上去很煩
ch[i] +=5;
if (ch[i] > 'Z')
{
ch[i] -= 26;
}
可以改成和 樓上的 方法
等價於 ch[i] = 'A' + (ch[i] - 'A' + 5) % 26;
*/
# include <stdio.h>
# include <stdlib.h> //用到了system(); 不寫 ,可以用 getchar();
#define strwidth 117 //定義長度
int main(void)
{
char ch[strwidth];
int i ;
printf("請輸入密碼:");
gets(ch); //輸入數據,用gets(); 保留了空格
for (i = 0; i < strwidth ;i++ )
{
if (ch[i] >= 'a' && ch[i] <= 'z' ) //判斷是否小寫字母
{
ch[i] +=5;
if (ch[i] > 'z') //不解釋,我想這樣,理解可能會方便點吧
{
ch[i] -= 26;
}
}
else if ( ch[i] >= 'A' && ch[i] <= 'Z') //判斷是否大寫字母
{
ch[i] +=5;
if (ch[i] > 'Z')
{
ch[i] -= 26;
}
}
}
printf("加密後為:%s\n" , ch); //輸出數據
system("pause");
return 0;
}
/*
或者 這樣
*/
# include <stdio.h>
# include <stdlib.h> //用到了system(); 不寫 ,可以用 getchar();
#define strwidth 117 //定義長度
int main(void)
{
char ch[strwidth];
int i ;
printf("請輸入密碼:");
gets(ch); //輸入數據,用gets(); 保留了空格
for (i = 0; i < strwidth ;i++ )
{
if (ch[i] >= 'a' && ch[i] <= 'z' || ch[i] >= 'A' && ch[i] <= 'Z' ) //判斷是否是字母
{
ch[i] +=5;
if ( ch[i]>'Z' && ch[i] <= 'Z' + 5 || ch[i] > 'z' )
{
ch[i] -= 26;
}
}
}
printf("加密後為:%s\n" , ch); //輸出數據
system("pause");
return 0;
}
⑽ C++編程 凱撒加密
#include<iostream>
#include<string>
usingnamespacestd;
voidencrypt(string&s)//加密
{
inti=s.length();
for(intj=0;j<i;++j)
{
if('A'<=s[j]&&s[j]<='Z')
{
if('A'<=s[j]&&s[j]<='W')
s[j]+=3;
else
s[j]-=23;
//cout<<s[j];
s[j]+=32;
//cout<<s[j]<<endl;
}
elseif('a'<=s[j]&&s[j]<='z')
{
if('a'<=s[j]&&s[j]<='w')
s[j]+=3;
else
s[j]-=23;
//cout<<s[j];
s[j]-=32;
//cout<<s[j]<<endl;
}
}
}
intmain()//測試
{
stringxy;
cout<<"輸入字元串"<<endl;
cin>>xy;
encrypt(xy);
cout<<xy<<endl;
return0;
}
聽說回答的夠長才能夠自動採納