當前位置:首頁 » 操作系統 » 凱撒進制演算法

凱撒進制演算法

發布時間: 2023-07-29 04:04:17

Ⅰ 怎麼用凱撒密碼加密一句中文

凱撒密碼作為一種最為古老的對稱加密體制,在古羅馬的時候都已經很流行,他的基本思想是:通過把字母移動一定的位數來實現加密和解密。明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例如,當偏移量是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) 。

Ⅱ 為什麼說加法密碼、乘法密碼、仿射密碼、置換密碼、Hill密碼以及Vigenere密碼

加法密碼就是真典密碼學中的愷撒密碼格式是:密文=(明文+密鑰)mod26,剩法密碼是愷撒密碼發展出來,格式是:密文=明文x實鑰mon26;置換密碼就是在簡單的縱行換位密碼中,明文以固定的寬度水平的寫在一張圖表紙上,密文按垂直方向讀出,解密就是密文按相同的寬度垂直的寫在圖表紙上,然後水平的讀出明文。希爾密碼(Hill Cipher)是運用基本矩陣論原理的替換密碼,由Lester S. Hill在1929年發明。每個字母當作26進制數字:A=0, B=1, C=2... 一串字母當成n維向量,跟一個n×n的矩陣相乘,再將得出的結果MOD26;Vigenere是愷撒密碼演變而來。使用一系列凱撒密碼組成密碼字母表的加密演算法,屬於多表密碼的一種簡單形式。
有興趣可以了解一下古典密碼學,這裡面都有。

Ⅲ 誰懂計算機的凱撒碼 我想知道怎麼代換

這里有方法,自己看吧,比較多,呵呵
[凱撒介紹]

凱撒密碼(kaiser)是羅馬擴張時期朱利斯"凱撒(Julius Caesar)創造的,用於加密通過信使傳遞的作戰命令。它將字母表中的字母移動一定位置而實現加密。

[加密原理]

凱撒密碼的加密演算法極其簡單。其加密過程如下:
在這里,我們做此約定:明文記為m,密文記為c,加密變換記為E(k1,m)(其中k1為密鑰),解密變換記為D(k2,m)(k2為解密密鑰)(在這里k1=k2,不妨記為k)。凱撒密碼的加密過程可記為如下一個變換:
c≡m+k mod n (其中n為基本字元個數)
同樣,解密過程可表示為:
m≡c+k mod n (其中n為基本字元個數)
對於計算機而言,n可取256或128,m、k、c均為一個8bit的二進制數。顯然,這種加密演算法極不安全,即使採用窮舉法,最多也只要255次即可破譯。當然,究其本身而言,仍然是一個單表置換,因此,頻率分析法對其仍是有效的。

[加密演算法]

我們預定義基本字元個數為 #define MAX 128
凱撒加密函數可以表示為

[Copy to clipboard]
CODE:
char cipher(char plain_char, int key)
{
return (plain_char + key) % MAX;
};

凱撒解密函數:

[Copy to clipboard]
CODE:
char decipher(char cipher_char, int key)
{
return (cipher_char - key + MAX) % MAX;
};

加密後,原所有的ASCII碼偏移key位,解密則移回key位。
如果要對一個文本文件進行加密,則只要依次逐個字元逐個字元地讀取文本文件,進行加密後,逐個字元逐個字元寫入密文文本文件中,即可:

[Copy to clipboard]
CODE:
FILE *fp_plaintext;
FILE *fp_ciphertext;
char plain_char;
... ...
while((plain_char=fgetc(fp_plaintext))!=EOF)
{
fputc(cipher(plain_char,key),fp_ciphertext);
}

對文件的解密也同樣方法。

[破解原理]

一篇包含字元的英文文章,其各ASCII碼字元出現,都有一定的頻率,下面是對Google上隨意搜索到的英文文章進行分析的結果,見表:

QUOTE:
=================================================
FileName : 01.txt

[1] 32: times:204
[2] 101:e times:134
[3] 116:t times:91
[4] 105:i times:87
[5] 111:o times:77
[6] 108:l times:75
[7] 97:a times:75
[8] 110:n times:69
[9] 10:
times:67
[10] 115:s times:63

=================================================
FileName : php.si.source.txt

[1] 32: times:576
[2] 101:e times:162
[3] 115:s times:153
[4] 110:n times:141
[5] 114:r times:138
[6] 105:i times:135
[7] 10:
times:134
[8] 116:t times:129
[9] 42:* times:116
[10] 111:o times:103

=================================================
FileName : work.txt

[1] 32: times:51322
[2] 101:e times:30657
[3] 116:t times:23685
[4] 97:a times:19038
[5] 111:o times:17886
[6] 105:i times:16156
[7] 110:n times:15633
[8] 114:r times:15317
[9] 115:s times:15226
[10] 104:h times:12191

=================================================
FileName : 02.txt

[1] 32: times:299
[2] 101:e times:217
[3] 110:n times:136
[4] 105:i times:133
[5] 111:o times:124
[6] 116:t times:116
[7] 97:a times:110
[8] 115:s times:98
[9] 114:r times:92
[10] 108:l times:82

=================================================
FileName : 03.txt

[1] 45:- times:404
[2] 32: times:394
[3] 101:e times:237
[4] 116:t times:196
[5] 114:r times:173
[6] 97:a times:163
[7] 105:i times:161
[8] 110:n times:153
[9] 111:o times:142
[10] 115:s times:129

=================================================
FileName : 04.txt

[1] 32: times:326
[2] 101:e times:179
[3] 116:t times:106
[4] 105:i times:101
[5] 111:o times:96
[6] 110:n times:94
[7] 97:a times:92
[8] 115:s times:78
[9] 100:d times:61
[10] 114:r times:60

=================================================
FileName : 05.txt

[1] 32: times:441
[2] 101:e times:191
[3] 111:o times:151
[4] 116:t times:120
[5] 97:a times:112
[6] 110:n times:108
[7] 105:i times:91
[8] 114:r times:84
[9] 117:u times:79
[10] 115:s times:79

有此分析可知,一篇英文文章中,出現較高頻率的兩個字元是 ' ' (空格) 和 'e',而且它們的ASCII碼分別是32和101,差值是69。
既然凱撒密碼利用的是單表替換的一種簡單加密演算法,所以,我們的主角, ' ' 和 'e' ,在解密後,依然會保持相同的ASCII碼差值,69。

|c1 - c2| = |'e' - ' '| = |101 - 32| = 69
|m1 - m2| = | ((c1 + k) mod 256)-((c2 + k) mod 256)| = |c1 - c2| = |'e' - ' '| = 69

現在可以得到破解凱撒密碼的原理了,我們統計一片經過凱撒加密的密文字元信息,在出現頻率較高的字元裡面尋找差值是69的2個字元,這兩個必定是 ' ' 和 'e' 字元的加密字元,計算偏移量(既密鑰key),通過解密運算,還原出明文。

[破解演算法]

任何一片英文加密後的密文,我們統計出所有字元的個數:

[Copy to clipboard]
CODE:
#define MAX 128

... ...

FILE *fp_ciphertext;
char cipher_char;
int i; //密文文件長度,包含多少字元
unsigned int size_file=0; //申明num數組,存儲各個ASCII字元在密文中出現的個數
num[MAX];

... ...

for(i = 0;i < MAX; i++) //初始化num數組中的值
num[i] = 0;

... ...

while((cipher_char=fgetc(fp_ciphertext))!=EOF)
{
num[cipher_char]++;
size_file++;
}

統計出現最多次數的字元,定義#define GETTOP 10,統計最多的前10位字元:

[Copy to clipboard]
CODE:
//統計前10位
#define GETTOP 10

... ...

int temp,i,j;
int maxascii[GETNUM]; //申明maxascii數組,存儲統計出的概率前10位的字元ascii碼
int maxtimes[GETNUM]; //申明maxtimes數組,存儲統計出的概率前10位的字元的出現次數

... ...

for(i=0;i<GETTOP;i++)
{
temp=0; //臨時變數temp裡面來存儲出現最多次數的字元的ascii碼
for(j=1;j<MAX;j++) //依次比較所有的字元次數,獲得最多字元的ascii碼
{
if(num[j]>=num[temp])
temp=j;
}
maxascii[i]=temp; //把出現最多次數字元的ascii存儲到相應的maxascii數組中
maxtimes[i]=num[temp]; //把最多次數字元的出現次數存儲到相應的maxtimes數組中
num[temp]=0; //把最多次數字元的次數賦值成0,
//進行循環運算,同樣的演算法,第二次循環得到的值,肯定是出現第二多的字元
//避免了對256或128個字元進行排序的復雜運算
//當年我用匯編編寫成績排序的程序時,也用這套排序演算法:-)

}

找出出現最多字元中,ASCII碼差別是69的兩個字元,計算出密鑰key的長度:

[Copy to clipboard]
CODE:
for(i=0;i<GETTOP;i++)
{
for(j=0;j<GETTOP;j++)
{
if((max[i]-max[j])==69)
{
key=(max[j] - 32 + MAX ) % MAX;
printf("Key : %d\n",key);
break;
}
}
}

既然得到了密鑰長度,算完成了對凱撒密碼的破解了,那就進行解密吧,大功告成!

Ⅳ 什麼是古典密碼

乘積和迭代:多種加密方法混合使用 對一個加密函數多次迭代 古典密碼編碼方法: 置換,代替,加法 把明文中的字母重新排列,字母本身不變,但其位置改變了,這樣編成的密碼稱為置換密碼。 最簡單的置換密碼是把明文中的字母順序倒過來,然後截成固定長度的字母組作為密⑴單表代替密碼
①、加法密碼
A和B是有 n個字母的字母表。 定義一個由A到B的映射:f:A→B f(ai )= bi=aj j=i+k mod n 加法密碼是用明文字母在字母表中後面第 k個字母來代替。 K=3 時是著名的凱撒密碼。 愷撒密碼——歷史上第一個密碼技術 「愷撒密碼」是古羅馬愷撒大帝在營救西塞羅戰役時用來保護重要軍情的加密系統(高盧戰記)。
②、乘法密碼
?A和B是有n個字母的字母表。?定義一個由A到B的映射:f:A→B f(ai )= bi= aj j=ik mod n 其中,(n,k)=1。?注意:只有(n,k)=1,才能正確解密。
③密鑰片語代替密碼
隨機選一個詞語,去掉其中的重復字母,寫到矩陣的第一行,從明文字母表中去掉這第一行的字母,其餘字母順序寫入矩陣。然後按列取出字母構成密文字母表
編輯本段⑵、多表代替密碼
?單表代替密碼的安全性不高,一個原因是一個明文字母只由一個密文字母代替。?構造多個密文字母表,?在密鑰的控制下用相應密文字母表中的一個字母來代替明文字母表中的一個字母。一個明文字母有多種代替。? Vigenere密碼:著名的多表代替密碼
(3)、代數密碼:
① Vernam密碼
明文、密文、密鑰都表示為二進制位: M=m1,m2,… ,mn K =k1,k2,… ,kn C =c1,c2,… ,cn
② 加密
c1= mi⊕ ki ,i=1,2,… ,n 解密 : m1= ci⊕ ki ,i=1,2,… ,n

因為加解密演算法是模2加,所以稱為代數密碼。
④對合運算
f=f-1,模 2加運算是對合運算。 密碼演算法是對和運算,則加密演算法=解密演算法,工程實現工作量減半。
⑤ Vernam密碼經不起已知明文攻擊


如果密鑰序列有重復,則Vernam密碼是不安全的。
⑦一種極端情況
一次一密 ? 密鑰是隨機序列。 ? 密鑰至少和明文一樣長。 ? 一個密鑰只用一次。

一次一密是絕對不可破譯的,但它是不實用的。

一次一密給密碼設計指出一個方向,人們用序列密碼逼近一次一密。

Ⅳ 凱撒演算法與DES加密演算法在性能上有何不同為什麼

數據加密標准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替代)。

熱點內容
柱頂要加密 發布:2025-03-14 21:16:11 瀏覽:852
魔聲藍牙耳機怎麼在安卓顯示電量 發布:2025-03-14 21:15:32 瀏覽:617
智慧易店伺服器地址是啥 發布:2025-03-14 20:57:49 瀏覽:886
小米ID密碼忘記了有什麼危害 發布:2025-03-14 20:45:28 瀏覽:610
大麥路由器怎麼改密碼 發布:2025-03-14 20:35:42 瀏覽:87
資料庫片語 發布:2025-03-14 20:27:21 瀏覽:248
角色卡演算法 發布:2025-03-14 20:08:48 瀏覽:650
linux伺服器安全加固 發布:2025-03-14 19:59:21 瀏覽:779
android系統資料庫 發布:2025-03-14 19:44:27 瀏覽:237
beats安卓手機怎麼彈窗 發布:2025-03-14 19:33:38 瀏覽:222