最近公司做的是关于银行的项目,需要用到加密,RSA需要,但是老大怕以后一银行要统一使用国钥加密,所以让集成两种加密方式,加密的方法通过传值不同加密类型和公钥,进行加密。

网上找了好多,都没有OC的加密集成,大都是java和c的。本人菜鸟c小白,不知道怎么使用c,找了好多网上的东西,给大家分享下,我集成好的过程。如果c比较好的去git上下载集成,自己使用。

一.方法一基于GmSSL的实现

1.第一篇文章的链接iOS开发实现SM2加密(基于GmSSL的实现)

2.第二篇文章的链接IOS编译和安装GmSSL

刚开始在网上看到这两篇文章。这两篇文章最关键的部分就是编译 GmSSL,我电脑上不知道,是不是因为安装了openssl,编译刚开始的时候,第一篇文章执行到------ sudo make install这行命令就报错,和他说的错误差不多,后执行几次, 因为 架构不同要重复更改后面的(armv7 armv7s arm64),就出现奇葩的错误,在网上找了好长时间都没有这样的错误,醉了。看了他们的步骤没有几步,如果你们可以编译通过最后把模拟器和真机的  xxxx.a 合并出来导入工程就可以用了。

二.方法二----基于openssl的实现

1.参考文章的链接在iOS中调用C语言的国密算法SM2以替换RSA (这个有下载的git的 demo)

下载的demo里面出了加密还有加签,验签。

因为公司要写个sdk,让客户使用sdk传值加密类型(RSA或者SM2)和公钥,进行加密。

demo中作者给的是直接的 px和py(因为sm2圆锥曲线加密,要把公钥分成 px,py,这个可以在网上查查)。因为老大给的公钥是base64后的字符串数据。所以在网上看一些sm2知识,然后看了下c代码需要的参数,于是通过一下步骤得到 px,py;

1.1先拿到base64后的字符串base64_decode,反编译,让后得到64位的字节数组,前32位px,后32位py。代码如下:

//公钥是错误的NSData * data11 = base64_decode(@"LZIF3FiM0RomSeBpNaUBU+LvRvHGAgkYwXKrrzd/DCl8ryAky1YMOHbH1G75s57qO+Md9mEnY73VHECxKMIsDGQ==");//base64解码datastatic NSData *base64_decode(NSString *str){NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];return data;}

1.2将data数据转化为Byte数组。让后得到px,py

        Byte *testByte = (Byte *)[data11 bytes];NSString *hexStr1=@"";NSString *hexStr2=@"";for(int i=0;i<[data11 length];i++){if (i < 32) {NSString *newHexStr = [NSString stringWithFormat:@"%x",testByte[i]&0xff];///16进制数if([newHexStr length]==1)hexStr1 = [NSString stringWithFormat:@"%@0%@",hexStr1,newHexStr];elsehexStr1 = [NSString stringWithFormat:@"%@%@",hexStr1,newHexStr];} else {NSString *newHexStr = [NSString stringWithFormat:@"%x",testByte[i]&0xff];///16进制数if([newHexStr length]==1)hexStr2 = [NSString stringWithFormat:@"%@0%@",hexStr2,newHexStr];elsehexStr2 = [NSString stringWithFormat:@"%@%@",hexStr2,newHexStr];}}NSLog(@"gongyao:%@==outputString1:%@", hexStr1,hexStr2);NSString *px_ = [hexStr1 stringByReplacingOccurrencesOfString:@" " withString:@""];//NSString *py_ = [@"E481C0D9EE8A98D4EEB6D6C6D7E74F8E3E707C8A438529492E663CD4373A2F24" stringByReplacingOccurrencesOfString:@" " withString:@""];NSString *py_ = [hexStr2 stringByReplacingOccurrencesOfString:@" " withString:@""];

1.3私钥解密步骤也一样,这样替换了你自己的 公钥和私钥就行了。

//私钥是错误的NSData * data = base64_decode(@"YjuIufQqjTHO77Xe3TKuMRzgqR62LXMmTpyagNWaGG+w=");Byte *bytes = (Byte *)[data bytes];NSString *hexStr=@"";for(int i=0;i<[data length];i++){NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16进制数if([newHexStr length]==1)hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];elsehexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];}NSLog(@"bytes 的16进制数为:%@",hexStr);NSString *pri_ = [hexStr stringByReplacingOccurrencesOfString:@" " withString:@""];

1.4然后把demo中的作者给的公钥私钥替换你自己的公钥就行了。第一种方法有时间我在尝试下,在研究下。

iOS SM2 加密相关推荐

  1. SM2加密解决java与iOS端加解密不配套问题

    SM2加密解决java与iOS端加解密不配套问题 问题描述 问题判定 代码 声明 问题描述 使用java开发的SM2加解密,由java层生成SM2公私钥,iOS.Android(因和java层一致,暂 ...

  2. 微信小程序wx.canvasToTempFilePath压缩上传图片,ios压缩成功但是数据sm2加密后无法发起请求,安卓一切正常

    问题以及解决: 吐槽遇到的问题~ 在写微信小程序的时候,采用wx.canvasToTempFilePath压缩图片且上传的时候,安卓一切正常,我在开发工具上也一切正常,偏偏ios上就不正常,不正常不是 ...

  3. Spring Security-用户密码自定义国密SM2加密

    为什么80%的码农都做不了架构师?>>>    由于甲方要求需要把密码的加密方式改为国密SM2的方式,网上看了一些写的代码,结合了一下SpringSecurity用户自定义加密,直接 ...

  4. iOS 字符串加密至MD5

    iOS 字符串加密至MD5 1 #import <CommonCrypto/CommonDigest.h> 2 3 + (NSString *) md5:(NSString *)str 4 ...

  5. 一行代码实现IOS 3DES加密解密

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...

  6. java ios 3des_IOS开发入门之iOS 3DES加密 和 java 3DES 解密

    本文将带你了解IOS开发入门之iOS 3DES加密  和 java  3DES 解密,希望本文对大家学ios有所帮助 对称加密算法 3des   在iOS 客户端加密算法 首先进入头文件: #impo ...

  7. php ios android 加密,在android/ios中加密,在php中解密

    我想解密我的网站上的一个字符串,该字符串在移动设备(Android或ios)上加密. 我有一个类似的输出,从这两个设备,它使用以下Android代码(sans例外保持简短).在android/ios中 ...

  8. c++国密算法SM2加密解密demo

    c++国密算法SM2加密解密 一.代码 一.代码 封装加密.解密接口: 加密接口: Encrpt_SM2() 解密接口:Decrypt_SM2() 加密解密结果可以和nodejs的模块sm-crypt ...

  9. 国密算法SM2加密解密

    一.依赖包 <!-- hutool的 SM2 加密--><dependency><groupId>org.bouncycastle</groupId>& ...

最新文章

  1. U-Boot 之二 详解使用 eclipse + J-Link 进行编译及在线调试
  2. 第一周周日DailyReporting——PM(李忠)
  3. 网桥(bridge) 和 交换机(switch) 之异同
  4. C语言知识总结——宏,枚举
  5. python string转int_Python编程入门:time模块常用技巧
  6. Mac Big sur如何设置触控板滚动不带惯性?
  7. 苹果mac专业的视频转码器:HandBrake
  8. mysql 员工登记表_员工部门信息表-myemployees
  9. 微弱信号检测_光电探测与信号处理教学大纲
  10. Linux知识点总结(思维导图,建议收藏)
  11. 树莓派yocto构建
  12. [Qt]setGeometry: Unable to set geometry……问题的解决方案
  13. 流媒体后视镜方案关键技术--电子防眩目
  14. XP系统清理优化工具箱
  15. bismark判断甲基化的比对原理
  16. Storm概念详解和工作原理,topology、spout、bolt的细节和API讲解之一
  17. 树莓派配置https://www.raspberrypi.org/documentation/configuration/中的一个单词翻译:
  18. 通信业的双11来了!充话费、办宽带、买手机每年这时候最划算
  19. c语言count的作用,C语言中count是什么意思?
  20. 计算机中日期函数的应用,解读:使用EXCEL中的TEXT函数将文本转换为日期

热门文章

  1. Windows系统命令dir使用详解
  2. 如何删除数据库表中重复的数据
  3. Idea(11):强制关闭Tomcat后,重启tomcat提示端口8080被占用
  4. VMware虚拟机解决网络不可达
  5. 功夫熊猫2完整版-中文字幕
  6. can协议crc计算_基于CAN总线的CRC校验码的原理与实现
  7. 数据可视化分析,近5年电视机全球出货量和中国产量
  8. Ionic制作Hybrid App系列一:Mac环境下Ionic的搭建
  9. PL-VINS运行及问题解决
  10. javaScript模块化解析