RSA加密

RSA基本原理:

RSA加密算法是基于一個(gè)密鑰對(duì)的,分為公鑰和私鑰,一般情況公鑰加密,私鑰解密,但也可私鑰加密,公鑰解密。

加簽驗(yàn)簽:

l? 簽名過(guò)程:

1.????????A提取消息m的消息摘要h(m),并使用自己的私鑰對(duì)摘要h(m)進(jìn)行加密,生成簽名s

2.????????A將簽名s和消息m一起,使用B的公鑰進(jìn)行加密,生成密文c,發(fā)送給B。

l ?驗(yàn)證過(guò)程:

1.????????B接收到密文c,使用自己的私鑰解密c得到明文m和數(shù)字簽名s

2.????????B使用A的公鑰解密數(shù)字簽名s解密得到H(m).

3.????????B使用相同的方法提取消息m的消息摘要h(m)

4.????????B比較兩個(gè)消息摘要。相同則驗(yàn)證成功;不同則驗(yàn)證失敗。


如果你想要理解通透,建議看這一篇博客,寫(xiě)的很好:

RSA算法原理(一)

RSA算法原理(二)


如何生成RSA公鑰私鑰(mac環(huán)境下)

一、使用OpenSSL來(lái)生成私鑰和公鑰(什么是OpenSSL,大家可以去谷歌)

1. ?openssl version -a(請(qǐng)驗(yàn)證你的機(jī)器上已經(jīng)安裝了OpenSSL)

2.? openssl genrsa -out rsa_private_key.pem 1024(生成一個(gè)1024位私鑰,名字為rsa_private_key.pem的文件)


3.? cat rsa_private_key.pem(查看私鑰的內(nèi)容)


內(nèi)容都是標(biāo)準(zhǔn)的ASCII字符,密鑰文件最終將數(shù)據(jù)通過(guò)Base64編碼進(jìn)行存儲(chǔ)??梢钥吹缴鲜雒荑€文件內(nèi)容每一行的長(zhǎng)度都很規(guī)律。這是由于RFC2045中規(guī)定:The encoded output stream must be represented in lines of no more than 76 characters each。也就是說(shuō)Base64編碼的數(shù)據(jù)每行最多不超過(guò)76字符,對(duì)于超長(zhǎng)數(shù)據(jù)需要按行分割。

4.? openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout(根據(jù)名字為rsa_private_key.pem的私鑰生成名字為rsa_public_key.pem的公鑰)


5. ?cat rsa_public_key.pem (參看公鑰的內(nèi)容)


生成的私鑰文件編碼是PKCS#1格式,這種格式Java其實(shí)是支持的,一般要求PKCS#8編碼,還需要進(jìn)行PKCS#8編碼:?

6.? openssl pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt (輸入私鑰文件為rsa_private_key.pem,輸出私鑰文件為pkcs8_rsa_private_key.pem,不采用任何二次加密(-nocrypt))

7.? cat pkcs8_rsa_private_key.pem (查看PKCS#8編碼之后的公鑰內(nèi)容)


至此,可用的密鑰對(duì)已經(jīng)生成好了,私鑰使用pkcs8_rsa_private_key.pem,公鑰采用rsa_public_key.pem。

注:如果采用PKCS#1格式,JAVA那邊需要多寫(xiě)幾句代碼:

RSAPrivateKeyStructure asn1PrivKey =newRSAPrivateKeyStructure((ASN1Sequence) ASN1Sequence.fromByteArray(priKeyData));

RSAPrivateKeySpec?rsaPrivKeySpec?=newRSAPrivateKeySpec(asn1PrivKey.getModulus(),?asn1PrivKey.getPrivateExponent());

KeyFactory?keyFactory=?KeyFactory.getInstance("RSA");

PrivateKey?priKey=?keyFactory.generatePrivate(rsaPrivKeySpec);


二、iOS代碼實(shí)測(cè):


參考文獻(xiàn):

RSA介紹:http://baike.baidu.com/view/7520.htm

OpenSSL介紹:http://baike.baidu.com/view/300712.htm

在線(xiàn)生成公鑰私鑰

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容