欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

經(jīng)典密碼學(xué)——行置換加密法

很多教材上對(duì)于行置換密碼、列置換密碼的定義都不是完全相同,甚至核心思想根本不一樣。筆者就自己學(xué)習(xí)的經(jīng)歷,簡單介紹一種一些教材上所謂的“行置換密碼”的算法,大家一起交流、探討。

創(chuàng)新互聯(lián)是專業(yè)的淮濱網(wǎng)站建設(shè)公司,淮濱接單;提供網(wǎng)站制作、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行淮濱網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

 

利用這種加密方法,明文按行填寫在一個(gè)矩陣中,而明文則是以預(yù)定的順序按列讀取生成的。例如如果矩陣是4列5行,那么明文“encryption algorithm”(省去空格后)可以如下寫入該矩陣:

2 3 1 4
e n c r
y p t i
o n a l
g o r i
t h m s

 

按一定的順序讀取列以生成密文。

對(duì)于這個(gè)示例,如果讀取順序?yàn)檫f增順序,則明文就是:“ctarm eyogt npnoh rilis”(添加空格只是為了便于觀察)。這種加密法的密鑰是列數(shù)和讀取列的順序。如果列數(shù)很多,記起來可能會(huì)比較困難,因此它可以表示成一個(gè)關(guān)鍵詞,該關(guān)鍵詞的長度等于列數(shù),而其字母順序決定讀取列的順序。

例如,關(guān)鍵詞“general”有7個(gè)字母,意味著矩陣有7列。由于“a”是“general”中字母順序最低的,因此數(shù)字1放在第6列;從左往右,第一個(gè)“e”為其次,所以數(shù)字2放在第2列;第二個(gè)“e”則是使數(shù)字3放在第4列。最后的順序如下:

g  e  n  e  r  a  l

4  2  6  3  7  1  5

_______________________________________________________________________________________

This scheme is to write the message in a rectangle, row by row, and read the message off, column by column, but permute the order of the columns.The order of the columns then becomes the key to the algorithm.For example, 

            Key:    4   3   1   2   5   6   7

      Plaintext:    a   t   t   a   c   k   p

                    o   s   t   p   o   n   e

                    d   u   n   t   i   l   t

                    w   o   a   m   x   y   z

     Ciphertext:  ttna aptm tsuo aodw coix knly petz (再次強(qiáng)調(diào),空格只是為了便于觀察)

Thus, in this example, the key is 4312567.To encrypt, start with the column that is labeled 1, in this case column 3. Write down all the letters in that column.

**************************************************************************************

上述的是一次加密,也可把上述密文當(dāng)做新一輪加密的明文,再次進(jìn)行行置換加密。

 

參考資料:

《Cryptography and Network Security Principles and Practice, Fifth Edition》

                                               ————William Stallings

《Classical And Contemporary Cryptology》      ————Richard Spillman

 

 

  1. //Z26上的行置換密碼 
  2. #include<stdio.h> 
  3. #include<string.h> 
  4. #include<stdlib.h> 
  5. #include<time.h> 
  6. int length;//明文長度 
  7. char plain[100000]; 
  8. char cipher[100000]; 
  9. char out[100000]; 
  10. int l;//密鑰長度 
  11. int key[100];//密鑰 
  12. int done_key[100]= {0}; //標(biāo)記是否已經(jīng)被轉(zhuǎn)換為數(shù)字 
  13. int num_key[100]= {0};//把密鑰換成數(shù)字 
  14. int num[100];//臨時(shí)矩陣,存放使順序遞增的下標(biāo)序號(hào) 
  15. void gen();//密鑰生成算法 
  16. void encryption(); 
  17. void decryption(); 
  18. int length_str(int a[]); 
  19. int main() 
  20.     int i; 
  21.     FILE *fp; 
  22.     fp=fopen("plain.txt", "r"); 
  23.     fscanf(fp, "%s", plain);//從文件讀入明文 
  24.     fclose(fp); 
  25.     length=strlen(plain); 
  26.     gen(); 
  27.     encryption(); 
  28.     printf("以上正確"); 
  29.     decryption(); 
  30.      for(i=0;i<length;i++) 
  31.     { 
  32.         printf("%c", out[i]); 
  33.     } 
  34.     return 0; 
  35.  
  36. void gen()//密鑰生成算法 
  37.     int i; 
  38.     printf("請(qǐng)輸入想生成的隨機(jī)密鑰的長度:"); 
  39.     scanf("%d", &l); 
  40.     srand(time(0)); 
  41.     for(i=0; i<l; i++) 
  42.     { 
  43.         key[i]=rand()%26; 
  44.     } 
  45.     printf("\n隨機(jī)產(chǎn)生的密鑰串為:"); 
  46.     for(i=0; i<l; i++) 
  47.     { 
  48.         printf("%c ", key[i]+97); 
  49.     } 
  50.     printf("\n\n"); 
  51. char a[50000][100];//臨時(shí)矩陣,為了更方便的把密文轉(zhuǎn)換出來 
  52. //這個(gè)數(shù)組必須設(shè)置為全局的,在函數(shù)中聲明的話申請(qǐng)內(nèi)存會(huì)出錯(cuò)!!! 
  53. void encryption() 
  54.     ///轉(zhuǎn)換:把密鑰字符串排序,變成數(shù)字 
  55.     int k=1; 
  56.     int i, j, m; 
  57.     int small;//每輪循環(huán)給"最小"的字母編號(hào)(未編號(hào)的、靠前的、序號(hào)小的字母為最小) 
  58.     for(i=0; i<l; i++) //把字母換成從1開始的數(shù)字 
  59.     { 
  60.         m=0; 
  61.         while(done_key[m]==1) 
  62.             m++; 
  63.         small=m; 
  64.         for(j=0; j<l; j++) 
  65.         { 
  66.             if(done_key[j]==0)//沒轉(zhuǎn)換則繼續(xù) 
  67.                 if(key[j]<key[small]) 
  68.                     small=j; 
  69.         } 
  70.         num_key[small]=k; 
  71.         done_key[small]=1; 
  72.         k++; 
  73.     }// 
  74.     printf("The order of the key is :\n"); 
  75.     for(i=0; i<l; i++) 
  76.     { 
  77.         printf("%d ", num_key[i]); 
  78.     } 
  79.     printf("\n"); 
  80.     for(i=0; i<length; i++) //忽略非字母字符,把大寫轉(zhuǎn)換為小寫 
  81.     { 
  82.         if(plain[i]>=65&&plain[i]<=90) 
  83.         { 
  84.             plain[i]+=32; 
  85.         } 
  86.     } 
  87.     while(length%l) 
  88.     { 
  89.         strcat(plain,"p");//不能整除時(shí)補(bǔ)上無效字符p 
  90.         length++; 
  91.     } 
  92.     //生成密文矩陣 
  93.     k=0; 
  94.  
  95.     for(i=0; i<length/l; i++) //行 
  96.         for(j=0; j<l; j++) //列 
  97.         { 
  98.             a[i][j]=plain[k++]; 
  99.         } 
  100.     k=0; 
  101.     for(i=0;i<l;i++)//列 
  102.     { 
  103.         for(j=0;j<l;j++) 
  104.             if(num_key[j]==i+1) 
  105.                 num[i]=j; 
  106.     } 
  107.     k=0; 
  108.     for(m=0;m<l;m++)//列 
  109.         for(j=0;j<length/l;j++)//行 
  110.             cipher[k++]=a[j][num[m]]; 
  111. char b[50000][100]; 
  112. void decryption()//解密函數(shù) 
  113.     int i, j, k; 
  114.     k=0; 
  115.     for(i=0;i<l;i++)//num[i]作為列 
  116.         for(j=0;j<length/l;j++)//行 
  117.             b[j][num[i]]=cipher[k++]; 
  118.     k=0; 
  119.     for(i=0;i<length/l;i++)//行 
  120.         for(j=0;j<l;j++)//列 
  121.             out[k++]=b[i][j]; 

 //同文件夾下需要有“plain.txt”文件,里面必須全部是英文字母,可大小寫混雜,但是不能出現(xiàn)其他字符,如空格、回車換行、數(shù)字等。

 

文章名稱:經(jīng)典密碼學(xué)——行置換加密法
網(wǎng)頁地址:http://www.aaarwkj.com/article30/pdhiso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、ChatGPT營銷型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、云服務(wù)器、動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
国产精品一区欧美精品| 欧美两性色一区二区三区| 国产激情av网站在线观看| 亚洲风情亚av在线播放| 99亚洲综合一区二区三区| 丁香六月综合激情啪啪啪| 国产真实乱偷精品视频免| 欧美日韩亚洲精品亚洲欧洲| 国内一级片内射视频播放| 亚洲精品第一页中文字幕| 国内丰满少妇嗷嗷叫在线播放 | 日本高清不卡在线观看| 国产精品午夜福利亚洲综合网| 日本福利一区二区三区| 国产亚洲精品热视频在线观看| 黄片在线免费在线播放| 亚洲精品永久在线观看| 日本高清不卡中文字幕| 未满十八禁止免费视频| 丰满多毛熟妇的大阴户| 久久精品一区二区三区乱码| 免费啪啪视频一区二区| 久久人妻一区二区三区免费密臀 | 午夜神马福利激情视频| av天堂五月在线观看| 色播婷婷午夜激情福利| 亚洲一区二区三区经典精品| 日韩av一区二区三区在线| 日本精品动漫一区二区三区| 一区二区三区乱码av| 熟女少妇a一区二区三区| 久久亚洲春色中文字幕| 亚洲国产精品中文字幕久久| 人妻一本久道久久综合鬼色| 亚洲精品日韩国产3区| 久久综合久中文字幕青草| 日韩精品亚洲一级在线观看| 一区二区中文字幕日本韩国| 四虎最新地址在线观看| 丰满人妻视频一二三区| 国产亚洲香蕉精彩视频|