• iOS RSA加解密以及签名验签


    初步认识:

    一、RSA

    1、RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。
    2、RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一
    3、通常是先生成一对RSA密钥,

    保密密钥:由用户保存
    
     公开密钥:可对外公开
    
     PS:为提高保密强度,RSA密钥一般推荐使用1024位
    

     4、公钥与私钥的用途

    1)公钥加密私钥解密是密送,保证消息即使公开也只有私钥持有者能读懂
     2)私钥加密公钥解密是签名,保证消息来源是私钥持有者
    

     二、使用RSA做密送

    1、生成公钥私钥。
    
         1)打开终端,在终端中cd到你想保存公钥私钥的文件夹
    
         2)生成模长为1024bit的私钥文件private_key.pem
    
           openssl genrsa -out private_key.pem 1024
    
         3)生成证书请求文件rsaCertReq.csr
    
           openssl req -new -key private_key.pem -out rsaCerReq.csr
    
           PS:这一步会提示输入国家、省份、mail等信息,可以根据实际情况填写,或者全部不用填写,直接全部敲回车.
    
         4) 生成证书rsaCert.crt,并设置有效时间为1年
    
           openssl x509 -req -days 3650 -in rsaCerReq.csr -signkey private_key.pem -out rsaCert.crt
    
         5)生成供iOS使用的公钥文件public_key.der
    
           openssl x509 -outform der -in rsaCert.crt -out public_key.der
    
         6)生成供iOS使用的私钥文件private_key.p12
    
           openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt
    
           注意:这一步会提示给私钥文件设置密码,直接输入想要设置密码即可,然后敲回车,然后再验证刚才设置的密码,再次输入密码,然后敲回车,完毕!
    
           在解密时,private_key.p12文件需要和这里设置的密码配合使用,因此需要牢记此密码.
    
     PS:正常来说公钥是加密使用,私钥是解密使用,我们做数据加密可以跟后台要公钥,然后将数据加密后给后台,让后台利用私钥解密,因为现在没有后台,此时我们自己生成公钥私钥
    
     2、新建工程, 并导入Security.framework框架
    
     3、导入.der和.p12格式的秘钥文件
    
     4、将课件用用于加密、解密的RSAEncryptor类导入工程
    
     5、测试加密、解密
    
        1)首先先测试使用.der和.p12秘钥文件进行加密、解密, 在ViewController.m中进行测试, 代码如下:
    
    
         - (void)viewDidLoad {
            [super viewDidLoad];
            //原始数据
            NSString *originalString = @"这是一段将要使用'.der'文件加密的字符串!";
            //使用.der和.p12中的公钥私钥加密解密
            NSString *public_key_path = [[NSBundle mainBundle] pathForResource:@"public_key.der" ofType:nil];
            NSString *private_key_path = [[NSBundle mainBundle] pathForResource:@"private_key.p12" ofType:nil];
            NSString *encryptStr = [RSAEncryptor encryptString:originalString publicKeyWithContentsOfFile:public_key_path];
            NSLog(@"加密前:%@", originalString);
            NSLog(@"加密后:%@", encryptStr);
            NSLog(@"解密后:%@", [RSAEncryptor decryptString:encryptStr privateKeyWithContentsOfFile:private_key_path password:@"123456"]);
    
        2)下面接着测试使用秘钥字符串进行加密、解密, 那么秘钥字符串从哪里来? 可以来这里:http://web.chacuo.net/netrsakeypair, 这是一个在线生成RSA秘钥的网站, 生成公钥和秘钥后, 复制出来用于测试,代码如下:
    
            //原始数据
            NSString *originalString = @"这是一段将要使用'秘钥字符串'进行加密的字符串!";
    
            //使用字符串格式的公钥私钥加密解密
            NSString *encryptStr = [RSAEncryptor encryptString:originalString publicKey:@"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTbZ6cNH9PgdF60aQKveLz3FTalyzHQwbp601y77SzmGHX3F5NoVUZbdK7UMdoCLK4FBziTewYD9DWvAErXZo9BFuI96bAop8wfl1VkZyyHTcznxNJFGSQd/B70/ExMgMBpEwkAAdyUqIjIdVGh1FQK/4acwS39YXwbS+IlHsPSQIDAQAB"];
    
            NSLog(@"加密前:%@", originalString);
            NSLog(@"加密后:%@", encryptStr);
            NSLog(@"解密后:%@", [RSAEncryptor decryptString:encryptStr privateKey:@"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



     

  • 相关阅读:
    ES5和ES6中的静态方法、类、单例模式
    Koa 应用生成器以及 Koa 路由模块化
    封装 Koa操作Mongodb数据库的DB类库
    Koa Session 的使用
    Koa 中 Cookie 的使用
    koa art-template 模板引擎
    koa koa-static 静态资源中间件
    koa post 提交数据 koa-bodyparser 中间件的使用
    koa ejs 模板引擎
    详解express与koa中间件执行顺序模式分析
  • 原文地址:https://www.cnblogs.com/ios-wanglong/p/6183353.html
Copyright © 2020-2023  润新知