iOS如何保证下载资源的可靠性,支付宝异步回调

作者: 网络编程  发布:2019-06-24

明日做支付宝接口回调那块,不得不说,弄的小编一筹莫展,翻了无数过去旧帖,试了众多种缓慢解决坑的方案,在自家成功化解的一须臾,以为非常有不可缺少记录一下那一个坑。

前言

有的时候要求在本地存款和储蓄能源,并且从服务器下载能源,因为涉及到运营时期的安全性,有必要增多校验的逻辑,因而有了本文的某些构思。

签订契约验证错误的反省各类(这里是基于使用官方给的demo,自身包装的请绕道):

ipa包被篡改的景观

率先思念的是ipa包的安全性难题。通过iTunes,大家能够下载ipa并且解压,修改包中的文件,再压缩成ipa包。

  • 1、尽管开采者A得到应用P的ipa包,修改在那之中的任何公文,都会导致签字失效,ipa包不能安装。(签字存放在.app文件的_CodeSignature文件夹)
  • 2、固然开垦者B得到应用P的ipa包,安装到谐和手提式无线电话机中,再一贯修改Bundle/Application 下的安插文件,此时应用P还是能够运作。
  • 3、借使开荒者C得到应用P的ipa包,修改当中的少数配置文件,用自个儿的申明重具名并经过别的渠道发表出来,ipa包能够平常安装。

动用在健康使用进程中,app包的公文是无能为力修改的,唯有越狱的对讲机才会现身意况2;情形3中重签字的ipa包不可能上传AppStore。真机app安装目录是 var/mobile/Containers/Bundle/Application沙盒目录是 var/mobile/Containers/Data/Application类似的,模拟的安装目录同样在/Bundle下,沙盒在/Data下;

金沙澳门官网 1

下载的能源存在沙盒目录,在未越狱的情况下,开采者并不能够修改个中的文件。然则,下载能源经常选拔http实行能源下载,http通过利用代理,能够很便利的修改下载的财富。为了保证下载能源的可靠性,选择了一套基于PRADOSA算法的表达方案,具体的中央有:1、开辟者发生一对密钥:公钥和私钥,私钥保存在安顿平台,公钥放到客户端。2、当文件上流传配置平台后,配置平台对文本进摘要获得md5str,并私钥对md5str举行签名拿到signStr,然后把 文件和signStr下发给客户端。3、客户端下载文件和signStr,总结文件的摘要拿到md5str,用md5str和公钥验证signStr的有效性。

解释:非对称加密算法的乘除比较复杂 ,所以只对摘要进行加密;具体的流程图如下:

金沙澳门官网 2

奥迪Q5SA算法的三种加密方法:

  • 公钥加密,私钥解密。(一般用于公钥持有方向私钥持有者
  • 私钥加密,公钥解密。(一般用于签字和表达,私钥加密也便是签订契约,公钥解密也便是验证)

苹果提供的Security.framework,有以下四个措施:

  • SecKeyEncrypt—encrypts a block of data using the specified key.(使用公钥对数据开始展览加密)
  • SecKeyDecrypt—decrypts a block of data using the specified key. (使用私钥对数据开始展览解密)
  • SecKeyRawSign—signs a block of data using the specified key.(使用私钥对数码具名)
  • SecKeyRawVerify—verifies a signature against a block of data and a specified key. (使用公钥对数字签字举办认证)

类比到OpenSSL,其提供了以下多个接口:

int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa,int padding);int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa,int padding);int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa,int padding);int RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa,int padding);

因为安德拉SA算法的总结量相当的大,一般不会直接采纳中华VSA对数码开始展览加密,而是对AES的密匙举行加密,再用AES对数码加密。普拉多SA算法原理 ,这里有一篇详细介绍OdysseySA算法原理的稿子。

得到后台下发的具名后,就需求保留具名,可以选取:保存在文书中、保存到NSUserDefault、保存到数据库等。除却,是不是可以保留在文件属性?写了一段代码举行测试:

 NSMutableDictionary *changedAttrDict = [[NSMutableDictionary alloc] init]; [changedAttrDict setObject:@"loying" forKey:NSFileOwnerAccountName]; [changedAttrDict setObject:@"NSFileGroupOwnerAccountName" forKey:NSFileGroupOwnerAccountName]; [changedAttrDict setObject:[NSDate dateWithTimeIntervalSinceNow:3600] forKey:NSFileCreationDate]; NSError *error; BOOL ret = [[NSFileManager defaultManager] setAttributes:changedAttrDict ofItemAtPath:encodedDataPath error:&error];

金沙澳门官网 ,透过测试,NSFileCreationDate那些性格是能够修改的;NSFileGroupOwnerAccountNameNSFileOwnerAccountName无法修改(真机为@"mobile");模拟器不得以修改四个特性,最大的大概性是因为模拟器运维发生的公文,权限远远不足修改文件属性;createDirectoryAtPath:withIntermediateDirectories:attributes:本条格局一致有其一范围。写入文件属性还或许有别的的界定,当文件在分化硬盘格式(HFS and FAT32)拷贝的时候,文件附带的性质也许会流失。

NSFileProtectionKey 是后台形式下的文书读写

为了支付方便人民群众,可以选用保存到NSUserDefault的艺术。新建NSMutableDictionary,用文件作为key,用FileConfig作为value。FileConfig是认证相关的性质封装,便于后续开采。

1、NSUserDefault全数的品质最后会写入Libary/Preference/下的plist文件中,所以NSUserDefault中不可能储存敏感音讯。

2、如若赶过错误:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object那是因为NSUserDefault只好存基本项目,假使dict里面存有自定义类型,必要先转成NSData再囤积;(plist里面未有组织消息,唯有key-value)

1:检查一下你使用的表达具名的法门是或不是科学?

总结

别的手腕都没有办法儿完全幸免恶意的抨击,只可以抓牢门槛。

bool signVerified = AlipaySignature.RSACheckV1(dic, alipay_public_key, config.charset);

附录

iOS使用Security.framework实行奥迪Q7SA 加密解密具名和认证签字

 

2:检查一下你传入的参数是或不是准确?

参数1:dic,把回调的参数保存到key,value会集中

Dictionary<string, string> dic = new Dictionary<string, string>();
var form = HttpContext.Current.Request.Form;
string str = "异步通知:rn";
foreach (var key in form)
{
   dic[key.ToString()] = HttpContext.Current.Request.Form[key.ToString()];
   var value = HttpContext.Current.Request.Form[key.ToString()];
   //记录日志使用
   str  = $"{key.ToString()}:{value}rn";
}

参数2:alipay_public_key

本条参数是 支付宝公钥!!   多数同伴都写成了应用公钥,瞎几把写。

参数3:编码格式,UTF-8,那一个貌似没人会错。

 

本文由金沙澳门官网发布于网络编程,转载请注明出处:iOS如何保证下载资源的可靠性,支付宝异步回调

关键词: 金沙澳门官网

上一篇:WebAPI设置路由和参数1,找不到与请求
下一篇:没有了