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公鑰私鑰(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)容)

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)容)

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