Merkle Hellman揹包演算法

2021-08-31 08:14:41 字數 1504 閱讀 9588

**:

2023年,merkle與hellman合作設計了使用揹包問題實現資訊加密的方法。其工作原理是:假定甲想加密,則先產生乙個較易求解的揹包問題,並用它的解作為專用金鑰;然後從這個問題出發,生成另乙個難解的揹包問題,並作為公共金鑰。如果乙想向甲傳送報文,乙就可以使用難解的揹包問題對報文進行加密,由於這個問題十分難解,所以一般沒有人能夠破譯密文;甲收到密文後,可以使用易解的專用金鑰解密。

但是,在它發表幾年後,就找到了攻破它的方法。即使如此,它仍然代表著一類很難問題的演算法。

揹包加密分為加法揹包和乘法揹包。

1、加法揹包:我們知道,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等等,你是無法知道的,所以,揹包加密非常難破。

2、乘法揹包:乘法揹包比加法揹包更複雜,不僅是運算量大了很多,更重要的是你得到的乙個被加密了的資料更大,一般都是上億的,而且在許多機密的機關裡面,揹包的資料都不是有這個單位,而是用位。我們知道,1<2,1+2<3,1*2*3<7,1*2*3*7<43,1*2*3*7*42<1683, 數字的增長還是很快的,之所以複雜,就是因為數字很大啊!揹包的特點是:如果揹包裡面的資料按小到大排列,那麼,前面所有資料的乘積小於後面的任何乙個元素,這個就是揹包的特點,是不是很簡單,但是要知道乘積的數字的增長是非常快的!揹包加密是一中相當高階的加密方式,不容易破解,而且還原也相對容易,因此採用這種加密方式加密遊戲資料也是非常好的,只要知道揹包,就可以輕易算出來。

這麼複雜的加密,怎麼解密?有如下兩中破解方法: 1.利用孤立點破解;2.利用揹包破解。 所謂孤立點,還是以上面的揹包為例子,我們可以把密碼設為a,看看得到了什麼密碼?1,如果我們把密碼設為b,得到的密碼為2,同理,可以把揹包裡面的所有元素都利用孤立點的方法全部列舉出來,這樣我們就把揹包弄到手了,對下面的破解就不成問題了,是不是很簡單?其實在加密的時候,也許它們回利用異或運算先加密一下,再利用揹包加密,這樣更難破,孤立點方法非常有效,但是不是萬能的,要結合前面的方法配合使用! 利用揹包,這個就簡單了,想一想,要加密也的有揹包才能完成加密啊,要解密也要揹包啊,這就是說,不管是使用者端,還是伺服器端,都會有該揹包的,找到該揹包不是就解決問題了嗎?怎麼找?大家可以稍微找一些書籍學習一下。首先是要了解進製,特別是十六進製制、二進位制和十進位制及其之間的轉換。這些加密方法在大學應該會接觸的。很多資料都需要加密,例如銀行的資料、網路遊戲、軍事機構、行政機構以及其他重要場所。不過雖然這種加密效果非常好,但是加密的程度太大也不現實,一般不會有非常複雜的加密,如果乙個資料就幾百位,而且還用非常規進製,那麼可以想象電腦要算多久啊,會多麼影響速度啊!

揹包 01揹包,完全揹包,多重揹包

哈哈 01揹包 f i v max 完全揹包 f i v max 多重揹包 f i v max include include include include include define maxn 1000 using namespace std int n,cap int w maxn 重量 花...

揹包學習 多重揹包揹包

有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。狀態轉移方程 f i v max 此時他面臨的不是01揹包的選與不選的問題,而是從n i 裡面選多少個的問題。實現方法 1 轉化...

揹包學習 多重揹包揹包

有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。狀態轉移方程 f i v max 此時他面臨的不是01揹包的選與不選的問題,而是從n i 裡面選多少個的問題。實現方法 1 轉化...