這裡只是講講rsa
rsars
a是怎麼加密以及怎麼解密。
採用r sa
rsars
a的方法後可以得到乙個公鑰(n,
e)
(n,e)
(n,e
)和私鑰(n,
d)
(n,d)
(n,d)。
對於乙個明文a
aa,我們把它加密得到b
bb,b=a
emod
nb=a^e~~mod~~n
b=aemo
dn。我們把b
bb,發給接收者,接收者把b
bb解密:a=b
dmod
na=b^~~mod~~n
a=bdmo
dn即可檢視密文了。
那麼r sa
rsars
a是怎麼做的呢?
首先我們任意選取兩個質數p,q
p,qp,
q,令n=p
qn=pq
n=pq
,然後求出n
nn的尤拉函式r=ϕ
(n
)r=\phi(n)
r=ϕ(n)
。任選乙個小於r
rr且與r
rr互質的數d
dd,求出d
dd在模r
rr意義下的逆元e
ee,然後組成公鑰(n,
e)
(n,e)
(n,e
)和私鑰n,d
n,dn,
d,最後銷毀p,q
p,qp,
q即可。
我們可以根據之前的方法解密:bd=
aed=
ab^=a^=a
bd=aed
=a可知此方法是正確的。
在攻擊者已知n
nn和e
ee,如果他能求出ϕ(n
)\phi(n)
ϕ(n)
來,那麼即可獲得私鑰(n,
d)
(n,d)
(n,d
)了。又由於ϕ(n
)=(p
−1)(
q−1)
\phi(n)=(p-1)(q-1)
ϕ(n)=(
p−1)
(q−1
),而p,q
p,qp,
q對於攻擊者是不可知的,那麼他只能夠去分解n
nn,那麼只要p,q
p,qp,
q足夠大,耗費的時間就會是不可承受的。
我們看一道題來加深印象。
(ccpc-final 2018)k - mr. panda and kakin
題意:x
xx是[1e5,1e9]的隨機數,p
pp是小於x
xx的最大素數,q
qq是大於等於x的最小素數,n=p
,c=f
230+3
modn
n=p,c=f ^+3}~~~mod~~n
n=p,c=
f230
+3mo
dn,給n
nn和c
cc求fff。
題解
這個題就是乙個裸的rsa
rsars
a解密。我們在n
\sqrt
n附近找到p,q
p,qp,
q,求出ϕ(n
)\phi(n)
ϕ(n)
,令e =2
30+
3e=2^
e=230+
3,d=e−
1mod
ϕ(n)
d=e^~~mod~~\phi(n)
d=e−1m
odϕ(
n)。那麼c=f
emod
nc=f^e ~~ mod~~n
c=femo
dn,就是所謂的密文了,f
ff即為cdm
od
nc^~~mod~~n
cdmodn
。
RSA加密解密
擷取自我的部落格 因為專案需要,最近做乙個rsa加密解密的介面,使用go進行開發,介面使用jsonrpc,go 對rsa加密解密有很好的支援,不過由於受限於底層微控制器,所以上層應用需要做一些稍微的調整。rsa是一種非對稱加密演算法,什麼是非對稱加密演算法呢,那就是公鑰 私鑰可互相進行加密解密 公鑰...
RSA加密解密
rsa加密使用公鑰加密,使用私鑰解密,rsa可以自己隨機生成一組公鑰和私鑰 rsa隨機生成一組公鑰和秘鑰 隨機生成公鑰和秘鑰 沒建立乙個rsacryptoserviceprovider物件,能生成一組隨機的秘鑰,物件相同不管執行多少次方法都是生成的同一組秘鑰 公鑰 私鑰 public static ...
RSA加密解密
rsautil.j a package com.soc.cloud.util import com.soc.cloud.exception.commonerror import com.soc.cloud.param.baseerrresult import com.soc.cloud.util.r...