您的位置:首页 > 移动开发 > IOS开发

iOS RSA加解密以及签名验签

2016-12-15 15:10 501 查看

初步认识:

一、RSA1、RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。
2、RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一
3、通常是先生成一对RSA密钥,保密密钥:由用户保存 公开密钥:可对外公开 PS:为提高保密强度,RSA密钥一般推荐使用1024位4、公钥与私钥的用途1)公钥加密私钥解密是密送,保证消息即使公开也只有私钥持有者能读懂 2)私钥加密公钥解密是签名,保证消息来源是私钥持有者二、使用RSA做密送1、生成公钥私钥。 1)打开终端,在终端中cd到你想保存公钥私钥的文件夹 2)生成模长为1024bit的私钥文件private_key.pem opensslgenrsa-outprivate_key.pem1024 3)生成证书请求文件rsaCertReq.csr opensslreq-new-keyprivate_key.pem-outrsaCerReq.csr PS:这一步会提示输入国家、省份、mail等信息,可以根据实际情况填写,或者全部不用填写,直接全部敲回车. 4)生成证书rsaCert.crt,并设置有效时间为1年 opensslx509-req-days3650-inrsaCerReq.csr-signkeyprivate_key.pem-outrsaCert.crt 5)生成供iOS使用的公钥文件public_key.der opensslx509-outformder-inrsaCert.crt-outpublic_key.der 6)生成供iOS使用的私钥文件private_key.p12 opensslpkcs12-export-outprivate_key.p12-inkeyprivate_key.pem-inrsaCert.crt 注意:这一步会提示给私钥文件设置密码,直接输入想要设置密码即可,然后敲回车,然后再验证刚才设置的密码,再次输入密码,然后敲回车,完毕! 在解密时,private_key.p12文件需要和这里设置的密码配合使用,因此需要牢记此密码. PS:正常来说公钥是加密使用,私钥是解密使用,我们做数据加密可以跟后台要公钥,然后将数据加密后给后台,让后台利用私钥解密,因为现在没有后台,此时我们自己生成公钥私钥 2、新建工程,并导入Security.framework框架 3、导入.der和.p12格式的秘钥文件 4、将课件用用于加密、解密的RSAEncryptor类导入工程 5、测试加密、解密 1)首先先测试使用.der和.p12秘钥文件进行加密、解密,在ViewController.m中进行测试,代码如下: -(void)viewDidLoad{ [superviewDidLoad]; //原始数据 NSString*originalString=@"这是一段将要使用'.der'文件加密的字符串!"; //使用.der和.p12中的公钥私钥加密解密 NSString*public_key_path=[[NSBundlemainBundle]pathForResource:@"public_key.der"ofType:nil]; NSString*private_key_path=[[NSBundlemainBundle]pathForResource:@"private_key.p12"ofType:nil]; NSString*encryptStr=[RSAEncryptorencryptString:originalStringpublicKeyWithContentsOfFile:public_key_path]; NSLog(@"加密前:%@",originalString); NSLog(@"加密后:%@",encryptStr); NSLog(@"解密后:%@",[RSAEncryptordecryptString:encryptStrprivateKeyWithContentsOfFile:private_key_pathpassword:@"123456"]); 2)下面接着测试使用秘钥字符串进行加密、解密,那么秘钥字符串从哪里来?可以来这里:http://web.chacuo.net/netrsakeypair,这是一个在线生成RSA秘钥的网站,生成公钥和秘钥后,复制出来用于测试,代码如下: //原始数据 NSString*originalString=@"这是一段将要使用'秘钥字符串'进行加密的字符串!"; //使用字符串格式的公钥私钥加密解密 NSString*encryptStr=[RSAEncryptorencryptString:originalStringpublicKey:@"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTbZ6cNH9PgdF60aQKveLz3FTalyzHQwbp601y77SzmGHX3F5NoVUZbdK7UMdoCLK4FBziTewYD9DWvAErXZo9BFuI96bAop8wfl1VkZyyHTcznxNJFGSQd/B70/ExMgMBpEwkAAdyUqIjIdVGh1FQK/4acwS39YXwbS+IlHsPSQIDAQAB"]; NSLog(@"加密前:%@",originalString); NSLog(@"加密后:%@",encryptStr); NSLog(@"解密后:%@",[RSAEncryptordecryptString:encryptStrprivateKey:@"MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANNtnpw0f0+B0XrRpAq94vPcVNqXLMdDBunrTXLvtLOYYdfcXk2hVRlt0rtQx2gIsrgUHOJN7BgP0Na8AStdmj0EW4j3psCinzB+XVWRnLIdNzOfE0kUZJB38HvT8TEyAwGkTCQAB3JSoiMh1UaHUVAr/hpzBLf1hfBtL4iUew9JAgMBAAECgYA1tGeQmAkqofga8XtwuxEWDoaDS9k0+EKeUoXGxzqoT/GyiihuIafjILFhoUA1ndf/yCQaG973sbTDhtfpMwqFNQq13+JAownslTjWgr7Hwf7qplYW92R7CU0v7wFfjqm1t/2FKU9JkHfaHfb7qqESMIbO/VMjER9o4tEx58uXDQJBAO0O4lnWDVjr1gN02cqvxPOtTY6DgFbQDeaAZF8obb6XqvCqGW/AVms3Bh8nVlUwdQ2K/xte8tHxjW9FtBQTLd8CQQDkUncO35gAqUF9Bhsdzrs7nO1J3VjLrM0ITrepqjqtVEvdXZc+1/UrkWVaIigWAXjQCVfmQzScdbznhYXPz5fXAkEAgB3KMRkhL4yNpmKRjhw+ih+ASeRCCSj6Sjfbhx4XaakYZmbXxnChg+JB+bZNz06YBFC5nLZM7y/n61o1f5/56wJBALw+ZVzE6ly5L34114uG04W9x0HcFgau7MiJphFjgUdAtd/H9xfgE4odMRPUD3q9Me9LlMYK6MiKpfm4c2+3dzcCQQC8y37NPgpNEkd9smMwPpSEjPW41aMlfcKvP4Da3z7G5bGlmuICrva9YDAiaAyDGGCK8LxC8K6HpKrFgYrXkRtt"]);下面给出一个Demo,demo中没有详细的调用,但是此demo中包括公钥文件加密私钥文件解密。公钥字符串加密私钥字符串解密。以及私钥签名,公钥验签。还包括数据转换为16进制字符串,BASE64编码解密文本各种接口,直接调用即可。demo中也有文档可参考,如有疑问欢迎咨询QQ:1340380530点此下载Demo


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: