加密小原理1
rsa密碼學(xué)小原理
- 設(shè)計類似的小游戲
猜數(shù)游戲
你心中默念一個數(shù),把它乘以13,把結(jié)果告訴我,我就能知道你心中默念的數(shù)是什么。
某小學(xué)生:你這不?的廢話嗎,都把結(jié)果告訴你了,你再除以13不就知道我想的啥數(shù)了,我上二年級我就知道了。
別急,那我們降低點(diǎn)條件,你不用把結(jié)果告訴我,你只需把結(jié)果的后三位告訴我,我就知道你想的什么數(shù)!
小學(xué)生:我不信。心里默默算***x13=*927,好,我算的結(jié)果后三位是927,說說我剛剛心里想的啥吧!
我:心中默算927x77=71379,你剛剛想的數(shù)是379!
小學(xué)生:哇,牛逼!
其實(shí)原理很簡單,379x1001=379x13x77=379379,把379換算成任意一個三位數(shù)或者兩位數(shù)也是一樣的。
當(dāng)然,上面只是例外,前提是小學(xué)生心中想的數(shù)<1000,要是小學(xué)生心中想的數(shù)>1000就失效了,所以,題目應(yīng)該為,心中默念一個小于1000的數(shù),把它乘以1000,把結(jié)果的后三位告訴我,我就知道你心中想的是什么數(shù)。
要是四位數(shù)想拿來玩,可以是:你心中想一個四位數(shù),它乘以13,把后三位數(shù)告訴我,我就能知道你想的四位數(shù)的后三位是什么。
上述游戲不限于使用13x77,也可以使用91x11,因?yàn)?3x17=11x91=1001,取后三位意思是除以1000的模。
原理如下:a%b=[ax(b+1)]%b
比如:
379%1000=[379x1001]%1000 這應(yīng)該不難理解
上述式子還可推理為:
={[(379x13)%1000]x77}%1000
為什么乘以13先取模對結(jié)果不會有影響呢?
if :乘以13后的計算結(jié)果<1000,那么取模后值不變,取模相當(dāng)于沒取模。
比如:(75x13)%1000=75x13
else :計算結(jié)果>1000,那么直接乘以77取1000模和先取1000模再乘以77再取1000模第二次,結(jié)果也是一樣的。
比如:
123x13=1599 1599%1000=599 599X77=46123 46123%1000=123
123x13=1599 1599x77=123123 123123%1000=123
設(shè)計類似的小游戲
根據(jù)公式:a%b=[ax(b+1)]%b
選擇隨機(jī)一個數(shù)b:比如14,意思是取14為模
那么14+1=15,把15進(jìn)行因式分解,15=3x5
那么小游戲如下:你心中默念一個小于14的數(shù),把它乘以3(或者x5),然后把它取14的模的計算結(jié)果告訴我,我就能知道你想的是哪個數(shù)!
tip:這里要知道取14的模,跟一千里知道后三位數(shù)是一樣的,告訴你后三位數(shù)就是告訴你取1000的模的計算結(jié)果!
總結(jié)
- 上一篇: c/c++中extern的作用
- 下一篇: 关于使用ajax给全局变量赋值失败的问题