轉發註明出處:http://www.cnblogs.com/0zcl/p/6111686.htmlhtml
原本我是想學RSA算法的,但發現太難了,不是我能理解的,因而我先看教材前面的揹包算法。不出意料的話會在下一篇博客介紹下RSA算法!算法
給定一些物體,每一個物體有不一樣的重量,是否有可能將這些物體放入一個揹包,使揹包的重量等於一個給定的值。編程
這些物體的重量分別爲1,5,6,11,14,20,則可將重5,6,11的物體放入,裝成一個重22的揹包。可是沒法裝成一個重24的揹包。安全
這個算法我沒有編程,時值考試月,時間緊張,等我有時間再回來搞~加密
首先,揹包算法用於信息安全(密碼法),咱們總得搞清楚什麼是明文,密文,密鑰吧?!url
舉例:spa
明文: 1 1 1 0 0 1 0 1 0 1 1 0 0 1 1 0 0 0 3d
密鑰: 1 5 6 11 14 20 1 5 6 11 14 20 1 5 6 11 14 20htm
密文: 1+5+6+20=32 5+11+14=30 5+6=11blog
從上面能夠總結:
算法安全性體現爲:
若攻擊者得到密文、密鑰,也沒法在線性時間內求明文(物品的裝入狀況)
算法的關鍵是有兩個不一樣的揹包重量序列,這兩個重量序列對於給定的相同的值,解相同(物品的裝入狀況相同)
前者物品的重量列表是遞增的,後者則是無序的
前者能夠解密,看下面~~
易解的揹包問題:若物品的重量列表爲一個超遞增序列,則該揹包問題很容易解的。
好比遞增序列:1 3 6 13 27 52
舉例:
如何構造公鑰呢?
通過上面的計算,序列爲:{62 93 81 88 102 37}做爲公鑰
解密這裏我遇到一個問題:如何求n-1,即如何求n關於模m的逆元??(注意:這裏必須搞懂,否則下一篇博客RSA算法就確定不懂的!)
我百度找了好多,也看了別了的博客,好比http://blog.sina.com.cn/s/blog_65a5cf5e0100nyqo.html,但我看不懂啊!!終於我找到了一個我能看懂的求逆元方法<展轉相除法求模的逆元>!(已經編程實現),下篇博客會發出來~~
爲了方便我整理,我把求逆元相關的過程截圖出來,你們也能夠點連接去看~ ending~
……