日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

古典密码算法------替代密码算法

發布時間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 古典密码算法------替代密码算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

替代密碼算法的原理是使用替代法進行加密,就是將明文中的字符用其它字符替代后形成密文。例如:明文字母abcd ,用DEFG做對應替換后形成密文。

替代密碼包括多種類型,如單表替代密碼、多明碼替代密碼、多字母替代密碼、多表替代密碼等。下面我們介紹一種典型的單表替代密碼,愷撒(caesar)密碼,又叫循環移位密碼。它的加密方法,就是將明文中的每個字母用此字符在字母表中后面第k個字母替代。它的加密過程可以表示為下面的函數:

E(m)=(m+k) mod n

其中:m為明文字母在字母表中的位置數;n為字母表中的字母個數;k為密鑰;E(m)為密文字母在字母表中對應的位置數。

例如,對于明文字母H,其在字母表中的位置數為8,設k=4,則按照上式計算出來的密文為L

E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L

  • package?cn.hdu.edu.encrypt; ?
  • ?
  • ?
  • /* ?
  • ?*?古典密碼算法之??替代算法 ?
  • ?*? ?
  • ?*/?
  • public?class?Replace?{ ?
  • ?
  • ????//當加密或者解密成功時返回CRYPT_OK,失敗時返回CRYPT_ERROR ?
  • ????private?final?static?int?CRYPT_OK?=?????1;?? ?
  • ????private?final?static?int?CRYPT_ERROR?=?0; ?
  • ????//設定一共有26個可用字母??字母a的編碼是97 ?
  • ????private?final?static?int?totalLetter?=?26; ?
  • ????private?final?static?int?key?=?3; ?
  • ?
  • ????/* ?
  • ?????*?@param?initCode?沒有加密前的字符串 ?
  • ?????*?@CRYPT_OK?加密成功 ?
  • ?????*?@CRYPT_ERROR?加密失敗 ?
  • ?????*/?
  • ????public?static?int?encrypt(String?initCode)throws?Exception{ ?
  • ????//用來輸出加密后的字符???? ?
  • ????StringBuilder?sb?=?new?StringBuilder(); ?
  • ????for(int?i?=?0;?i?<?initCode.length();?i++?){ ?
  • ????????????int?initCodeVal?=?initCode.charAt(i?)?-?96; ?
  • ????????????int?targetCodeVal?=?(initCodeVal?+?key?)?%?totalLetter; ?
  • ????????????if(targetCodeVal?==?0)?targetCodeVal?=?26; ?
  • ????????????char?targetCode?=??(char)(targetCodeVal?+96);??????? ?
  • ????????????sb.append(targetCode?); ?
  • ????} ?
  • ????//以下就是加密后的字符 ?
  • ????String?targetCode?=?sb.toString(); ?
  • ????System.out.println(targetCode); ?
  • ????????return?CRYPT_OK; ?
  • ????} ?
  • ???? ?
  • ????/* ?
  • ?????*?@param?targetCode?加密前的字符串 ?
  • ?????*?@CRYPT_OK?解密成功 ?
  • ?????*?@CRYPT_ERROR?解密失敗 ?
  • ?????*/?
  • ????public?static?int?decrypt(String?targetCode)throws?Exception{ ?
  • ????//用來輸出解密后的字符???? ?
  • ????StringBuilder?sb?=?new?StringBuilder(); ?
  • ????for(int?i?=?0;?i?<?targetCode.length();?i++?){ ?
  • ????????????int?targetCodeVal?=?targetCode.charAt(i?)?-?96; ?
  • ???????????? ?
  • ????????????//如果已經來到了字母表的開頭???給他還回去 ?
  • ????????????if(targetCodeVal?<=?key)?????targetCodeVal?+=?26; ?
  • ???????????????? ?
  • ????????????int?initCodeVal?=?targetCodeVal?-?key; ?
  • ????????????char?initCode?=??(char)(initCodeVal?+?96); ?
  • ????????????sb.append(initCode?); ?
  • ????} ?
  • ????//以下就是解密后的字符 ?
  • ????String?initCode?=?sb.toString(); ?
  • ????System.out.println(initCode); ?
  • ????????return?CRYPT_OK; ?
  • ????} ?
  • ???? ?
  • ???? ?
  • ???? ?
  • ???? ?
  • } ?
  • ?

    總結

    以上是生活随笔為你收集整理的古典密码算法------替代密码算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。