一.認識密碼學
加密算法分為對稱加密和非對稱加密:
-
對稱加密:對稱加密算法使用相同的密鑰進行加密和解密操作。發(fā)送方和接收方需要共享同一個密鑰,這個密鑰被稱為對稱密鑰。對稱加密算法的優(yōu)勢在于加密和解密速度快,適用于大量數(shù)據(jù)的加密。然而,對稱加密的缺點是密鑰分發(fā)問題。當通信雙方需要建立安全通信時,他們需要以安全的方式共享密鑰,否則第三方可能會截獲密鑰并破解加密的數(shù)據(jù)。常見的對稱加密算法有:AES(Advanced Encryption Standard)、DES(Data Encryption Standard)、3DES(Triple DES)和Blowfish等。
-
非對稱加密:非對稱加密算法使用一對密鑰,即公鑰和私鑰。公鑰是公開的,可以被任何人獲取;私鑰則需要嚴格保密。使用公鑰加密的數(shù)據(jù)只能用對應的私鑰解密,反之亦然。非對稱加密解決了對稱加密中的密鑰分發(fā)問題,因為公鑰可以公開,不需要安全地傳輸。然而,非對稱加密算法的缺點是加密和解密速度較慢,不適合對大量數(shù)據(jù)進行加密。常見的非對稱加密算法有:RSA、ECC(Elliptic Curve Cryptography)、ElGamal和DSA(Digital Signature Algorithm)等。
在實際應用中,通常會將對稱加密和非對稱加密結(jié)合使用。例如,使用非對稱加密算法安全地傳輸對稱密鑰,然后使用對稱加密算法對數(shù)據(jù)進行加密。這樣既保證了密鑰的安全傳輸,又能高效地加密和解密數(shù)據(jù)。
二.移位密碼
?? 移位密碼(Caesar Cipher)也叫凱撒密碼是一種簡單的加密技術(shù),它通過將明文中的每個字母按照指定的位數(shù)進行移位,從而生成密文。例如,在一個"左移3位"的移位密碼中,文中的每個字母都向左移動3個位置,即A變成D,B變成E, 以此類推。移位密碼可以被輕松破解,因此現(xiàn)在已經(jīng)很少用于實際的加密通信中。
三.移位密碼原理
2.1 名詞解釋
- 明文:發(fā)送發(fā)想要發(fā)送的信息;
- 密文:經(jīng)過加密后的信息;
- 密匙:加密時移動的位數(shù)k。
(這里解釋是我個人理解,非標準定義)
2.2 移位加密
具體來說,移位加密通常將明文中的每個字母替換為其在字母表中向后(或向前)移動固定數(shù)量的位置得到對應的密文字母。
步驟如下:
- 選擇一個偏移量 k,確定每個字符需要向后移動還是向前移動。
- 對于明文中的每個字符,根據(jù)偏移將其向后或向前移動相應的位數(shù),并將結(jié)果記錄下來。
- 將所有移位后的字符連接起來,得到密文。
例如:這里假設(shè)明文是 word ,現(xiàn)在的密匙(偏移量)為3,那么我們加密后的密文就是 zrug 。(這里需要結(jié)合字母順序表查看,順序表由發(fā)送發(fā)與接收方約定定義,無第三方知道) 這里的偏移量表示字母移動的距離,當偏移量為正數(shù)時,字母向后移動;當偏移量為負數(shù)時,字母向前移動。
2.3 移位解密
具體來說,移位解密通常將密文中的每個字母替換為其在字母表中向后(或向前)移動固定數(shù)量的位置得到對應的明文字母。
步驟如下:
- 選擇一個偏移量 k,確定每個字符需要向后移動還是向前移動。
- 對于密文中的每個字符,根據(jù)偏移將其向后或向前移動相應的位數(shù),并將結(jié)果記錄下來。
- 將所有移位后的字符連接起來,得到明文。
例如:如果現(xiàn)在的密文是 zrug ,密匙為3,那么明文就是 word 。
2.4 補充描述
- 現(xiàn)實生活中,密碼是不存在空格的,因為英文大家都知道,傳輸一篇文章空格要占許多,對發(fā)送加密造成干擾,所以約定去掉字母。
- 補充本次實驗所需的字母順序表:
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
這里我們?yōu)榱朔奖憷斫?,就用小寫?/p>
四.優(yōu)缺點
優(yōu)點:
- 簡單易懂
- 易于實現(xiàn)和使用
缺點:
- 安全性較低,容易受到暴力破解攻擊
- 容易受到頻率分析攻擊
缺陷原因分析:
- 只是將明文中的字符按照一定規(guī)則進行移動,不涉及其他復雜的操作;
- 沒有對明文中不同字符出現(xiàn)的頻率進行混淆處理。
五.C語言實現(xiàn)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Maxsize 50 //定義信息最大量
//加密函數(shù)
void jiami(char *&p,int n,int h)
{
printf("密文:");
for(int i=0;i<h-1;i++) //循環(huán)輸出數(shù)組的每一個字符
{
printf("%c",(char) ((p[i] + 'a' - 97) + n - 97) % 26 + 97);
}
printf("\n");
}
//解密函數(shù)
void jiemi(char *&p)
{
for (int i = 1; i < 26; i++) {
printf("k為%d的明文:", i); //循環(huán)輸出數(shù)組的每一個字符
for (int j = 0; j < strlen(p); j++) {
printf("%c", (char) (((p[j] + 'a' - 97) + 26 - i - 97) % 26 + 97));
//對應ASCLL碼表,但是我們自定義了字母順序表,需要轉(zhuǎn)換范圍
}
printf("\n");
}
}
int main()
{
char str1[Maxsize],str2[Maxsize];
char *p=str1,*q=str2;
int n;
printf("請輸入明文:"); //加密測試
fgets(str1, Maxsize, stdin);
int len1=strlen(str1);
printf("請輸入移位密匙:");
scanf("%d",&n);
jiami(p,n,len1);
printf("------------------");
printf("\n");
printf("請輸入密文:"); //解密測試
printf("\n");
scanf("%s",str2);
jiemi(q);
}
六.運行結(jié)果
文章來源:http://www.zghlxwxcb.cn/news/detail-501602.html
這是密碼學中最簡單的一種加密方法,但我們可以使其變得更復雜一些,比如自定義字母順序表,密匙加強等。同時可以作為我們接觸密碼學的一個切入點,后面更多復雜的知識點會慢慢接觸。文章來源地址http://www.zghlxwxcb.cn/news/detail-501602.html
到了這里,關(guān)于C語言實現(xiàn)移位密碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!