非對(duì)稱加密算法
非對(duì)稱加密算法又稱為公開密鑰加密算法,它需要兩個(gè)密鑰,一個(gè)稱為公開密鑰 (public key), 即公鑰;另一 個(gè)稱為私有密鑰 (private key), 即私鑰。公鑰與私鑰需要配對(duì)使用,如- 用公鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私鑰才能進(jìn)行解密,而如果使用私鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公鑰才能進(jìn)行解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法稱為非對(duì)稱加密算法。
非對(duì)稱加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過(guò)程是
甲方生成一 對(duì)密鑰并將其中的一把作為公鑰向其他人公開,得到該公鑰的乙方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方,甲方再使用自己保存的另一把專用密鑰(即私鑰)對(duì)加密后的信息進(jìn)行解密。
非對(duì)稱加密算法的特點(diǎn):對(duì)稱加密算法中只有一種密鑰,并且是非公開的,如果要解密就得讓對(duì)方知道密鑰,所以保證其安全性就是保證密鑰的安全,而一旦密鑰在傳輸過(guò)程中泄露,加密信息就不再安全。
非對(duì)稱加密算法能夠保證,即使是在獲知公鑰、加密算法和加密算法源代碼的情況下,也尤法獲得公鑰對(duì)應(yīng)的私鑰,因此也無(wú)法對(duì)公鑰加密的密文進(jìn)行解密。
當(dāng)前使用最為廣泛的非對(duì)稱加密算法非RSA莫屬。
1.RSA算法
RSA非對(duì)稱加密算法是在1977年由RonRivest、AdiShamirh和LenAdleman開發(fā)的,RSA取名來(lái)自他們?nèi)叩拿帧SA是目前最有影響力的非對(duì)稱加密算法,它能夠抵抗到目前為止(2016年)已知的所有密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。RSA算法基于一個(gè)十分簡(jiǎn)單的數(shù)論巾實(shí):將兩個(gè)大素?cái)?shù)相乘十分容易,但反過(guò)來(lái)想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。


首先初始化KeyPairGenerator, 并生成KeyPair, 得到KeyPair后,便可以通過(guò)getPublic與getPrivate分別取得公鑰和私鑰。為了方便保存(比如將相應(yīng)的密鑰存入數(shù)據(jù)庫(kù)),可以使用Base64編碼將其轉(zhuǎn)換為String類型的打印字符。


轉(zhuǎn)換之前,先對(duì)字符串進(jìn)行Base64解碼,公鑰需要先轉(zhuǎn)換成X509EncodedKeySpec對(duì)象,然后通過(guò)KeyFactory生成PublicKey對(duì)象,而私鑰需要先轉(zhuǎn)換成PKCS8EncodedKeySpec對(duì)象,丙通過(guò)KeyFactory生成PrivateKey對(duì)象。
待續(xù)。。
摘自:
《大型分布式網(wǎng)站架構(gòu)設(shè)計(jì)與實(shí)踐》 閱讀筆記