zoukankan      html  css  js  c++  java
  • IOS客户端实现RSA加密

    在IOS的app登陆模块,用户名和密码如果直接传给后台服务器,很容易被截获并伪造网络请求,

    如果利用RSA算法在每个客户端利用公钥解密,服务器端进行私钥解密,即使截获了密码也是无法解密的

    在这里只介绍客户端如何对密码进行公钥加密和解密

    首先打开终端生成公钥和私钥(要有openSSL工具)

    openssl genrsa -out private_key.pem 1024
    
    openssl req -new -key private_key.pem -out rsaCertReq.csr
    
    openssl x509 -req -days 3650 -in rsaCertReq.csr -signkey private_key.pem -out rsaCert.crt
    
    openssl x509 -outform der -in rsaCert.crt -out public_key.der          
     
    openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt
    openssl rsa -in private_key.pem -out rsa_public_key.pem -pubout
     
    openssl pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt

    在第二步的时候输入密钥的信息,包括密码,请记住你输入的密码
    上面的命令会生成7个文件,IOS用到的是public_key.der和private_key.p12
    导入到项目中不要直接拖拽进去,而是点击Xcode右下角的+号,选择add files to ""
    新建项目后添加库:Security.framework

    在项目中添加所依赖的文件RSAEncryptor和NSData+Base64在这里下载
    添加RSAEncryptor和NSData+Base64的头文件
    实现代码
        RSAEncryptor* rsaEncryptor = [[RSAEncryptor alloc] init];
        NSString* publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public_key" ofType:@"der"];
        NSString* privateKeyPath = [[NSBundle mainBundle] pathForResource:@"private_key" ofType:@"p12"];
        [rsaEncryptor loadPublicKeyFromFile: publicKeyPath];
        [rsaEncryptor loadPrivateKeyFromFile: privateKeyPath password:@"1234"];    // 密码
        
        NSString* restrinBASE64STRING = [rsaEncryptor rsaEncryptString:@"你好"];
        NSLog(@"加密后的: %@", restrinBASE64STRING);     //加密
        NSString* decryptString = [rsaEncryptor rsaDecryptString: restrinBASE64STRING];//解密
        NSLog(@"解密后的: %@", decryptString);
    输出结果

    2016-10-20 16:44:22.455 RSA[10579:458963] 加密后的: trsdtG4vkzsAbMzu4k6HL3NQau6zyvhQDwzfI1OcjiOGENydbEUJ/Rt9xgCmhbaP8VEGC6Zd2ZnBMlNnQ+/YAHvGGfdrdcO9QPwRex2LX38w5ctzDKByYnrEcKI9k3jwNGHepU7E3jNPvQdL89VssP1+vq6GiAqnYVOOCwtlm0U=

    2016-10-20 16:44:22.456 RSA[10579:458963] 解密后的: 你好



  • 相关阅读:
    mysql-5.7 show engine innodb status 详解
    mysql-5.7 saving and restore buffer pool state 详解
    mysql-5.7 监控innodb buffer pool load 的进度 详解
    python3 functools partial 用于函数的包装器详解
    mysql-5.7 innodb change buffer 详解
    mysqlbackup 重建带有gtid特性的slave
    将python图片转为二进制文本的实例
    nginx: [error] invalid PID number "" in "/run/nginx.pid"
    ubuntu中执行定时任务crontab
    Matplotlib:mpl_toolkits.mplot3d工具包
  • 原文地址:https://www.cnblogs.com/liyy2015/p/5981472.html
Copyright © 2011-2022 走看看