如何在IOS中使用RSA加密,能够与.NET的服务器互通 50
.NET服务器和IOS都是动态生成密钥并分发的,问题是IOS生成的公钥格式.NET无法识别,IOS也无法使用.NET的RSA密钥,附上IOS的公钥和.NET公钥IOS:M...
.NET服务器和IOS都是动态生成密钥并分发的,问题是IOS生成的公钥格式.NET无法识别,IOS也无法使用.NET的RSA密钥,附上IOS的公钥和.NET公钥
IOS:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfo83dxjC/NOaBqt/rmxQRRfMYM/mbrwV9Io5xCDhCY95pkAX/BS+zWIh93irXz/7yjr2V1k5YFkWCErqR7WP1/Hje5SQeio4OZwXbORZZOA8IipmrGa5kEtcS9r9BFw2siyHJ8Ec8hyJF8W/LsfzU9YpdxQyR5++rtjPtoUPvewIDAQAB
.NET:
BgIAAACkAABSU0ExAAQAAAEAAQABTGbWauw4DyXsrxD9X9L7yN2P1rxClRcNa+HY834TTVD/GrxuqYzZ1SJibfzr9cKcUZw4oroYMHKQms/0yUItj6yUuz0yV9JuM0kIaZeMH6cpzpUvJIp37kK39Qis20/222qihSedrvyGLDBgXYdlQJe7JLpBAJ9hJLR+E7E/ng== 展开
IOS:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfo83dxjC/NOaBqt/rmxQRRfMYM/mbrwV9Io5xCDhCY95pkAX/BS+zWIh93irXz/7yjr2V1k5YFkWCErqR7WP1/Hje5SQeio4OZwXbORZZOA8IipmrGa5kEtcS9r9BFw2siyHJ8Ec8hyJF8W/LsfzU9YpdxQyR5++rtjPtoUPvewIDAQAB
.NET:
BgIAAACkAABSU0ExAAQAAAEAAQABTGbWauw4DyXsrxD9X9L7yN2P1rxClRcNa+HY834TTVD/GrxuqYzZ1SJibfzr9cKcUZw4oroYMHKQms/0yUItj6yUuz0yV9JuM0kIaZeMH6cpzpUvJIp37kK39Qis20/222qihSedrvyGLDBgXYdlQJe7JLpBAJ9hJLR+E7E/ng== 展开
1个回答
展开全部
在 ios 上你需要使用证书加密。
首先生成一张证书。微软的.Net framework SDK为我们提供了一个生成X.509数字证书的命令行工具Makecert.exe。
打开.Net的控制台,使用如下命令生成证书:
makecert -sr LocalMachine -ss My -n CN=Theoservice -sky exchange -pe
然后,开始->运行->MMC,打开MMC控制台。文件->添加/删除管理单元->添加按钮->选”证书”->添加->选”计算机账户”->关闭->确定,然后你就可以在 “个人->证书” 里看到刚才生成的证书了。证书采用1024位密钥加密。现在,你需要做得就是导出这张证书。如果你的服务器并不是本机,你首先需要导出一个带私钥的pfx格式的证书。导出时需要你填写密码来保护这张证书,然后将其导入到服务器上就好了。此外,你还需要导出一份不带私钥的cer格式的证书。这张证书只含有公钥,是用来和客户端一起发布出去用来加密数数据的。
证书有了以后就是加密解密。C#程序,估计这个你已经写过。
然后将导出的证书导入到你的 IOS程序中,写相应的程序。
注意:RSA分组加密是采用了1024位的密钥,所以密钥长度为1024/8=128个byte。而C#默认采用#PKSC1的padding模式,每次最多可以加密128-11=117个byte。也就是说,RSA分组加密算法每次从明文里取<=117个byte,然后加密成128个byte的密文;解密的时候,每次就取128个byte的密文,将其解密成<=117个byte的明文。因为#PKSC1的padding模式每次padding的内容是随机的,所以即使是加密同一段明文,每次的结果也不一样,这大大的增加了数据安全性。
ios端:就是每次取117个byte的明文并加密成128个byte的密文,最后连起来做base64编码。
首先生成一张证书。微软的.Net framework SDK为我们提供了一个生成X.509数字证书的命令行工具Makecert.exe。
打开.Net的控制台,使用如下命令生成证书:
makecert -sr LocalMachine -ss My -n CN=Theoservice -sky exchange -pe
然后,开始->运行->MMC,打开MMC控制台。文件->添加/删除管理单元->添加按钮->选”证书”->添加->选”计算机账户”->关闭->确定,然后你就可以在 “个人->证书” 里看到刚才生成的证书了。证书采用1024位密钥加密。现在,你需要做得就是导出这张证书。如果你的服务器并不是本机,你首先需要导出一个带私钥的pfx格式的证书。导出时需要你填写密码来保护这张证书,然后将其导入到服务器上就好了。此外,你还需要导出一份不带私钥的cer格式的证书。这张证书只含有公钥,是用来和客户端一起发布出去用来加密数数据的。
证书有了以后就是加密解密。C#程序,估计这个你已经写过。
然后将导出的证书导入到你的 IOS程序中,写相应的程序。
注意:RSA分组加密是采用了1024位的密钥,所以密钥长度为1024/8=128个byte。而C#默认采用#PKSC1的padding模式,每次最多可以加密128-11=117个byte。也就是说,RSA分组加密算法每次从明文里取<=117个byte,然后加密成128个byte的密文;解密的时候,每次就取128个byte的密文,将其解密成<=117个byte的明文。因为#PKSC1的padding模式每次padding的内容是随机的,所以即使是加密同一段明文,每次的结果也不一样,这大大的增加了数据安全性。
ios端:就是每次取117个byte的明文并加密成128个byte的密文,最后连起来做base64编码。
追问
问题是,我们需要动态密钥,也就是说,不能静态生成证书。我们要保证每个客户端的每次通讯,都是用不同的密钥进行加密的,所以你这个方法行不通
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询