Ⅰ 加密處理程序,從鍵盤輸入一段英文文字,將其中每個字母用其後的第四個字母代替,最後的字母循環到前面的
有3個大問題:1. main里調用的那兩個函數不應該在寫成聲明的句子.
2. str[i]=str[i]+'4';和+'22'還有減的那兩句,應該是數字不應該是帶引號的字元
3. 在那兩個函數里的循環里應該加上結束符判斷,列印字元的參數不應該是str[100]
還有scanf("%s",&str[100]);改成scanf("%s",str);
Ⅱ 這是什麼演算法我知道加密密碼和原密碼
所謂加密演算法就是指將信息變成密文的計算方法。有的加密演算法就是對信息進行簡單的替換或亂序這種加密演算法最明顯的缺陷就是演算法本身必須保證是安全的現代加密演算法通常都需要密鑰來完成對信息的加密運算,演算法本身可以公開理論上只要保證密鑰的安全就能保證信息的安全。
最早的愷撒密文就是一種簡單的字母替換加密演算法演算法本身非常簡單但同時也是最容易破解的演算法其加密方式就是按照其在英文字母表裡的順序將字母循環移位整個演算法可歸結為下面的公式
f(x)
=
(
x
+
s
)
mod
26
其中x是原文字母s是一個常數例如如果s等於3則字母a就被加密為d,而字母z就被加密為c
這種加密方法雖然簡單但是缺點也是顯而易見的比如明文中字母c出現的次數是5次的話則加密後對應的字母出現的次數也是5次也就是說字母出現的頻率沒有變化。比如e是英文中最常用的字母那麼給定一個足夠大的密文該文中出現,最多的字母很可能就是e。如果不是那可能是a、i或q。密碼學專家只用十幾個密碼字母就能很快的進行這種統計攻擊。現代加密演算法與這種簡單的字母替換演算法不同的地方在於加密演算法的安全性基於用於加密的密鑰而不是演算法本身對於好的加密演算法即使公開其演算法設計原理也不會對其安全性產生絲毫的影響只要用於加密的密鑰是安全的則被加密的信息也就是安全的
Ⅲ 電文加密演算法:輸入一個小寫字母,將字母循環後移5個位置後輸出。從鍵盤輸入一電文密碼,輸入其相應的密碼
char jiami(char ch)
{
/* 加密小寫字元,其他字元不管 */
if(ch>='a' && ch<='z')
return ('a' + (ch-'a'+5) % 26);
else
return ch;
}
Ⅳ 有種古典加密方法就是按照字母表順序,把每個字母循環右移k位,從而轉換為加密的另一個字母。
#include<stdio.h>
#include<math.h>
intmain()
{
intk;
inti;
chara[100];
printf("輸入k:");
scanf("%d",&k);
printf("輸入一段英文:");
getchar();
gets(a);
for(i=0;a[i];i++)
{
if(a[i]<='Z'&&a[i]>='A')
a[i]=(a[i]+k-'A')%26+'A';
else if(a[i]<='z'&&a[i]>='a')
a[i]=(a[i]+k-'a')%26+'a';
}
printf("加密後:");
puts(a);
return0;
}
Ⅳ 加密密鑰和加密演算法有什麼區別
密鑰和加密演算法的區別:
1.
密鑰是一種參數(它是在明文轉換為密文或將密文轉換為明文的演算法中輸入的數據);
2.
加密演算法是明文轉換成密文的變換函數...是演算法;
3.
同樣的密鑰可以用不同的加密演算法呀,得到的密文就不一樣了。
舉個很簡單的例子,比如凱撒密碼,就是將字母循環後移n位,這個n就是一個密鑰,循環後移的方法叫做演算法,對明文用不同的密鑰加密的結果不一樣,雖然他們用的是相同的演算法。
比如run用key=1(密鑰)的凱撒密碼,變成svo,用key=2(密鑰)加密就成了twp,所以密鑰和演算法是明顯不同的,再比如現在公鑰密碼體系大多用的rsa演算法,但每個人的密鑰不一樣,密文才不同。
另外,一般來說,演算法是公開的,而密鑰是不公開的。
Ⅵ 電文加密演算法:輸入一個小寫字母,將字母循環後移5個位置後輸出。從鍵盤輸入一電文密碼,輸入其相應的密碼
Dim s As String:s = inputbox("請輸入一個小寫字母")
Msgbox "密碼為:" & Chr(((Asc(s) - 97 + 5) Mod 26) + 97)
Ⅶ 密鑰和加密演算法是個什麼關系
密鑰是一種參數(它是在明文轉換為密文或將密文轉換為明文的演算法中輸入的數據),加密演算法是明文轉換成密文的變換函數,同樣的密鑰可以用不同的加密演算法,得到的密文就不一樣了。
舉一個示例,例如凱撒密碼,該字母向後旋轉n位,該n是密鑰, 向後移動的方法稱為演算法。 盡管使用相同的演算法,但是對明文用不同的密鑰加密的結果不一樣。
例如,Run使用Key = 1(密鑰)的凱撒密碼,即Svo,而Key = 2(密鑰)的加密,則成為Twp,因此密鑰和演算法存在很大差異。
現在大多數公鑰密碼系統都使用RSA演算法,但是每個人的密鑰的密文不同。 通常,該演算法是公共的,密鑰不是公共的。 加密演算法恰好包含兩個輸入參數,一個是明文,另一個是密鑰。
(7)加密演算法字母循環擴展閱讀:
1、密鑰演算法
使用極其復雜的加密演算法,即使解密者可以加密他選擇的任意數量的明文,也無法找出破譯密文的方法。 秘密密鑰的一個弱點是解密密鑰必須與加密密碼相同,這引發了如何安全分配密鑰的問題。
2、公鑰演算法
滿足三個條件:第一個條件是指在對密文應用解密演算法後可以獲得明文。 第二個條件是指不可能從密文中得出解密演算法。 第三個條件是指即使任何明文形式的選擇都無法解密密碼,解密程序也可以加密。 如果滿足上述條件,則可以公開加密演算法。
Ⅷ 用C語言實現任意字元串的加密,其中,字母用凱撒加密方法加密,非字母不變
我盡量用注釋闡述了思路,希望可以幫到你!!
#include<stdio.h>
#include<string.h>
#define N 80 //可加密字元串最大長度
char plaintext[N]={0}; //明文,輸入時輸入字元,參與運算時強制轉換成整數
int ciphertext[N]={0}; //密文,保存成整數,輸出時強制轉換成字元
int k; //後(右)移位數,相當於密鑰
void getPlainText() //獲得明文字元串
{
printf("請輸入明文:");
scanf("%s",plaintext);
printf("\n");
}
void getLength() //獲取後(右)移位數(密鑰)
{
printf("請輸入後移的位數:");
scanf("%d",&k);
k%=26; //因為字母只有26個,所以超過26相當於重復
}
void Caesar_cipher() //凱撒加密,本程序採用的是字母循環後(右)移
{
unsigned int i;
for(i=0;i<strlen(plaintext);i++)
{
//兩個bool類型的變數是為了判斷字元是否是字母(包括大寫和小寫)
bool flag1=plaintext[i]>='a'&&plaintext[i]<='z';
bool flag2=plaintext[i]>='A'&&plaintext[i]<='Z';
if(flag1||flag2){ //如果是字母,加密
ciphertext[i]=(int)plaintext[i]+k; //字母在字母表中後(右)移K位
if(ciphertext[i]>(int)'z'){ //保證是循環後(右)移
ciphertext[i]-=26;
}
}
else //非字母字元,不做處理,原樣保存
ciphertext[i]=(int)plaintext[i];
}
}
void printCipherText() //輸出加密後的密文
{
unsigned int i;
printf("\n加密後的密文是:");
for(i=0;i<strlen(plaintext);i++) //把參與計算後是整數強制轉換成對應的字元
printf("%c",(char)ciphertext[i]);
printf("\n");
}
void main()
{
getPlainText(); //明文
getLength(); //後(右)移位數
Caesar_cipher(); //凱撒加密
printCipherText(); //密文
}
Ⅸ 說明:凱撒密碼中的英文字母的移位以及25位循環的原理,初學密碼學有些不明白為什麼4段單詞可推出6段的密文
凱撒密碼不是需要數字密匙嗎?你可以把維納熱爾方陣列出來看看,有第26行的 。
例如:phhw ph diwhu wkh wrjd swb 得出:meet me after the toga party
這個密文是倒數3位字母