iOS SM2 加密
最近公司做的是关于银行的项目,需要用到加密,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 加密相关推荐
- SM2加密解决java与iOS端加解密不配套问题
SM2加密解决java与iOS端加解密不配套问题 问题描述 问题判定 代码 声明 问题描述 使用java开发的SM2加解密,由java层生成SM2公私钥,iOS.Android(因和java层一致,暂 ...
- 微信小程序wx.canvasToTempFilePath压缩上传图片,ios压缩成功但是数据sm2加密后无法发起请求,安卓一切正常
问题以及解决: 吐槽遇到的问题~ 在写微信小程序的时候,采用wx.canvasToTempFilePath压缩图片且上传的时候,安卓一切正常,我在开发工具上也一切正常,偏偏ios上就不正常,不正常不是 ...
- Spring Security-用户密码自定义国密SM2加密
为什么80%的码农都做不了架构师?>>> 由于甲方要求需要把密码的加密方式改为国密SM2的方式,网上看了一些写的代码,结合了一下SpringSecurity用户自定义加密,直接 ...
- iOS 字符串加密至MD5
iOS 字符串加密至MD5 1 #import <CommonCrypto/CommonDigest.h> 2 3 + (NSString *) md5:(NSString *)str 4 ...
- 一行代码实现IOS 3DES加密解密
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...
- java ios 3des_IOS开发入门之iOS 3DES加密 和 java 3DES 解密
本文将带你了解IOS开发入门之iOS 3DES加密 和 java 3DES 解密,希望本文对大家学ios有所帮助 对称加密算法 3des 在iOS 客户端加密算法 首先进入头文件: #impo ...
- php ios android 加密,在android/ios中加密,在php中解密
我想解密我的网站上的一个字符串,该字符串在移动设备(Android或ios)上加密. 我有一个类似的输出,从这两个设备,它使用以下Android代码(sans例外保持简短).在android/ios中 ...
- c++国密算法SM2加密解密demo
c++国密算法SM2加密解密 一.代码 一.代码 封装加密.解密接口: 加密接口: Encrpt_SM2() 解密接口:Decrypt_SM2() 加密解密结果可以和nodejs的模块sm-crypt ...
- 国密算法SM2加密解密
一.依赖包 <!-- hutool的 SM2 加密--><dependency><groupId>org.bouncycastle</groupId>& ...
最新文章
- U-Boot 之二 详解使用 eclipse + J-Link 进行编译及在线调试
- 第一周周日DailyReporting——PM(李忠)
- 网桥(bridge) 和 交换机(switch) 之异同
- C语言知识总结——宏,枚举
- python string转int_Python编程入门:time模块常用技巧
- Mac Big sur如何设置触控板滚动不带惯性?
- 苹果mac专业的视频转码器:HandBrake
- mysql 员工登记表_员工部门信息表-myemployees
- 微弱信号检测_光电探测与信号处理教学大纲
- Linux知识点总结(思维导图,建议收藏)
- 树莓派yocto构建
- [Qt]setGeometry: Unable to set geometry……问题的解决方案
- 流媒体后视镜方案关键技术--电子防眩目
- XP系统清理优化工具箱
- bismark判断甲基化的比对原理
- Storm概念详解和工作原理,topology、spout、bolt的细节和API讲解之一
- 树莓派配置https://www.raspberrypi.org/documentation/configuration/中的一个单词翻译:
- 通信业的双11来了!充话费、办宽带、买手机每年这时候最划算
- c语言count的作用,C语言中count是什么意思?
- 计算机中日期函数的应用,解读:使用EXCEL中的TEXT函数将文本转换为日期