1. 程式人生 > >加密解密3(揹包加密)

加密解密3(揹包加密)

       揹包加密是一中相當高階的加密方式,不容易破解,而且還原也相對容易,因此採用這種加密方式加密遊戲資料也是非常好的,只要知道揹包,就可以輕易算出來,所以在遊戲裡面採用這種加密方式加密對遊戲的影響也不是很大,不會給伺服器帶來太大的負擔,而且加密是非常安全的,對於一些重要的資料採用這種方式加密是非常可靠的,說了那麼多,你也許會問:“什麼是揹包加密方式”,好下面給大家說明。
  揹包分兩種,加法揹包和乘法揹包!想講加法揹包!
我們知道:1<2,1+2<4,1+2+4<8,1+2+4+8<16,……,那麼如果我們選擇這樣一些數,這些數從小到大排列,如果前面所有的數加起來的值總小於後面的數,那麼這些數就可以構成一個揹包,我們給一個這個揹包裡面的某些數的和,這個數就是被加密的數,由這個揹包組成這個數只有一種組合方式,這個方式就是祕密了,例如給大家一個封包(2,3,6,12,24,48),由這個揹包裡的某些數構成的數:86,你知道86怎麼來的嗎?當然,你看著揹包裡面的內容,可以知道是由2+12+24+48得到的,如果你沒有這個揹包,而是直接得到這個86,你知道組成這個86的最小的數是多少嗎?你無法知道,因為加起來等於86的數非常多:85+1=86,82+2=86等等,你是無法知道的,所以,揹包加密非常難破。
  那麼遊戲裡面如何利用這個加密呢?可以給大家一個例子。
  如果遊戲裡面,使用者名稱和密碼只能有字母和數字組成,那麼總共就那麼36個元素,我們利用一個包含36個元素的揹包,揹包的一個元素對應一個字母或者數字,當玩家設好使用者名稱後,我們把這個使用者名稱翻譯成揹包裡面的元素,然後把這些使用者轉化而來的數字加起來,得到一個數,這個數就是使用者名稱,你得到這個數,你知道使用者名稱嗎?也許大家還沒明白我說什麼,我把例子更具體一點,你也許就明白了!
  有個密碼是:511,這個密碼是經過加法揹包加密的,如果你沒有揹包,你知道密碼嗎?不知道吧,呵呵!
  如果我告訴你揹包是:(1,2,4,8,16,32,64,128,256),也許你對密碼瞭解多也些了!
  如果我告訴你,這個是加法揹包,而且有如下對應關係:1對應a,2對應b,4對應c,8對應d,16對應e,32對應f,64——>g,128---->h,256---->i,那麼你也許知道密碼就是:abcdefghi,怎麼樣,從511到這個密碼,是不是很難想到呢?也許你會說,如果密碼不是這個順序呢?當然,這個完全是可能的,但是我們這裡為了簡單就沒有考慮這個。
  這麼複雜的加密,怎麼解密?有如下兩中破解方法:
  1.利用孤立點破解;2.利用揹包破解。
  所謂孤立點,還是以上面的揹包為例子,我們可以把密碼設為a,看看得到了什麼密碼?1,如果我們把密碼設為b,得到的密碼為2,同理,可以把揹包裡面的所有元素都利用孤立點的方法全部枚舉出來,這樣我們就把揹包弄到手了,對下面的破解就不成問題了,是不是很簡單?其實在加密的時候,也許它們回利用異或運算先加密一下,再利用揹包加密,這樣更難破,孤立點方法非常有效,但是不是萬能的,要結合前面的方法配合使用!
  利用揹包,這個就簡單了,想一想,要加密也的有揹包才能完成加密啊,要解密也要揹包啊,呵呵,這就是說,不管是遊戲的使用者端,還是遊戲的伺服器端,都會有該揹包的,找到該揹包不是就解決問題了嗎?怎麼找?參考其他書籍,本書無法容納那麼多的內容!特別注意遊戲程式設計,知道是怎麼做的就知道東西在哪兒了!
  講完加法揹包,下面講乘法揹包!

 

 

乘法揹包


  乘法揹包比加法揹包更復雜,不僅是運算量大了很多,更重要的是你得到的一個被加密了的資料更大,一般都是上億的,而且在許多機密的機關裡面,揹包的資料都不是有這個單位,而是用位,一個加密的資料有幾百位,呵呵,你得到這個數字,可以看到你滿臉的茫然,如果這個數不是10進位制,而是什麼7進位制啊,3進位制啊,這些很不常用的進位制,你要破可就難了,不過不要害怕,遊戲裡面絕對不會有這麼複雜的加密的,如果一個數據就幾百位,而且還非常用進位制,那麼可以想想電腦要算多久啊,會多麼影響遊戲速度啊!所以我們有充分的理由相信,遊戲裡面加密是簡單的,還了,下面給大家看看乘法揹包:
1<2,1+2<3,1*2*3<7,1*2*3*7<43,1*2*3*7*42<1683, 數字的增長還是很快的,之所以複雜,就是因為數字很大啊!
揹包的特點是:如果揹包裡面的資料按小到大排列,那麼,前面所有資料的乘積小於後面的任何一個元素,這個就是揹包的特點,是不是很簡單,但是要知道乘積的數字的增長是非常快的!
  怎麼破解乘法揹包呢?
  同加法揹包一樣,可以利用孤立點的方法,也可以使用直接得到揹包的方法破解!
  一般來說遊戲裡面不會使用乘法揹包來加密,但是如果使用一些小的資料,也不是不可以的,大家對這種加密也可以瞭解一下!:
  如果我們已經知道揹包了,也得到加密資料,我們怎麼知道這個揹包數是有那些元素組曾的呢?
  在加法揹包裡面是這樣的,找揹包裡面最接近這個數但是又比這個數小的數A,這個數A 一定在裡面,然後把加密的數減去A,比較被減後的數,繼續重複上面的操作,是很容易就能找到所有的組成元素了!乘法的方法也是一樣的道理,這裡就不介紹了!
  揹包解密是很複雜的,大家可以稍微學習一些,能掌握就掌握,不能掌握就算了!
  好了,加密解密就這些內容,如果大家有興趣,可以學習更多的加密解密技術,這個技術是新興的技術,很多資料都需要加密,例如銀行的資料,加密就非常重要,如果你學到這門技術,對你的以後發展也是有用的!