+ (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey{ if(!data || !privKey){ return nil; } SecKeyRef keyRef = [RSA addPrivateKey:privKey]; if(!keyRef){ return nil; } return [RSA decryptData:data withKeyRef:keyRef]; }
+ (NSData *)decryptData:(NSData *)cipherData withKeyRef:(SecKeyRef) keyRef{ size_t plainBufferSize = SecKeyGetBlockSize(keyRef); NSLog(@"plainBufferSize = %zd", plainBufferSize); uint8_t *plainBuffer = malloc(plainBufferSize * sizeof(uint8_t)); // 计算数据段最大长度及数据段的个数 double totalLength = [cipherData length]; size_t blockSize = plainBufferSize; size_t blockCount = (size_t)ceil(totalLength / blockSize); NSMutableData *decryptedData = [NSMutableData data]; // 分段解密 for (int i = 0; i < blockCount; i++) { NSUInteger loc = i * blockSize; // 数据段的实际大小。最后一段可能比blockSize小。 int dataSegmentRealSize = MIN(blockSize, totalLength - loc); // 截取需要解密的数据段 NSData *dataSegment = [cipherData subdataWithRange:NSMakeRange(loc, dataSegmentRealSize)]; OSStatus status = SecKeyDecrypt(keyRef, kSecPaddingPKCS1, (const uint8_t *)[dataSegment bytes], dataSegmentRealSize, plainBuffer, &plainBufferSize); if (status == errSecSuccess) { NSData *decryptedDataSegment = [[NSData alloc] initWithBytes:(const void *)plainBuffer length:plainBufferSize]; [decryptedData appendData:decryptedDataSegment]; } else { if (plainBuffer) { free(plainBuffer); } return nil; } } if (plainBuffer) { free(plainBuffer); } return decryptedData; }
IOS RSA分段解密
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 基础知识 什么是RSA?答:RSA是一种非对称加密算法,常用来对传输数据进行加密,配合上数字摘要算法,也可以进行文...
- 前几天做项目的时候遇到了3DES的解密数据,KEY是服务端返回的。在网上查了好多篇文章,发现IOS中3DES...
- 看到这篇文章的同学可幸福了,当时在做RSA加密与签名的时候网上的资料简直不要太老,做完后实在是忍受不下去了,这篇文...
- 常见的加密算法 MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ D...
- 一篇搞定RSA加密与SHA签名|与Java完全同步 转载:https://www.cnblogs.com/On1K...