ios常见加密解密方法

R链式中介:如何一次性生成4个变量所有可能的链式中介结果?(含结果解读与粗略作图)#bruceR#ggplot2 一次性生成4个变量所能生成的24种链式中介并作图 阅读详情

在其他平台中经常会计算MD5值,在ios平台中也提供了该方法,首先需要导入头文件

#import <CommonCrypto/CommonDigest.h>
方法CC_MD5可以获取MD5的16个字符的数组,再通过%02X的形式输出即可获取32位MD5值。

@implementation NSString (CCCryptUtil)
-(NSString*) md5 {
    const char * cStrValue = [self UTF8String];
    unsigned char theResult[CC_MD5_DIGEST_LENGTH];
    CC_MD5(cStrValue, strlen(cStrValue), theResult);
    return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
            theResult[0], theResult[1], theResult[2], theResult[3], 
            theResult[4], theResult[5], theResult[6], theResult[7], 
            theResult[8], theResult[9], theResult[10], theResult[11], 
            theResult[12], theResult[13], theResult[14], theResult[15]];
}
@end

MD5只能称为一种不可逆的加密算法,只能用作一些检验过程,不能恢复其原文。

apple还提供了RSA、DES、AES等加密算法,见到国外的网站关于AES加密的算法,在此经过加工可以用于字符串加密机密,可用于安全性要求较高的应用。

首先需要导入头文件

#import <CommonCrypto/CommonCryptor.h>
将NSData分类,添加NSData加密解密方法

@implementation NSData (CCCryptUtil)

- (NSData*)AES256EncryptWithKey:(NSString*)key {
    
    char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
    
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
    NSUInteger dataLength = [self length];
    
    size_t bufferSize           = dataLength + kCCBlockSizeAES128;
    void* buffer                = malloc(bufferSize);
    
    size_t numBytesEncrypted    = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                          keyPtr, kCCKeySizeAES256,
                                          NULL /* initialization vector (optional) */,
                                          [self bytes], dataLength, /* input */
                                          buffer, bufferSize, /* output */
                                          &numBytesEncrypted);
    
    if (cryptStatus == kCCSuccess) {
        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
    }
    
    free(buffer);
    return nil;
}

- (NSData*)AES256DecryptWithKey:(NSString*)key {
    
    char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
    
    // fetch key data
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
    NSUInteger dataLength = [self length];
    
    size_t bufferSize           = dataLength + kCCBlockSizeAES128;
    void* buffer                = malloc(bufferSize);
    
    size_t numBytesDecrypted    = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                          keyPtr, kCCKeySizeAES256,
                                          NULL /* initialization vector (optional) */,
                                          [self bytes], dataLength, /* input */
                                          buffer, bufferSize, /* output */
                                          &numBytesDecrypted);
    
    if (cryptStatus == kCCSuccess) {
        return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
    }
    
    free(buffer); //free the buffer;
    return nil;
}

@end
上述代码AES256EncryptWithKey方法为加密函数,AES256DecryptWithKey为解密函数,加密和解密方法使用的参数密钥均为32位长度的字符串,所以可以将任意的字符串经过md5计算32位字符串作为密钥,这样可以允许客户输入任何长度的密钥,并且不同密钥的MD5值也不会重复。

结合上述代码,加工NSString类,提供字符串的AES加密解密方法。代码如下:

@implementation NSString (CCCryptUtil)

// md5方法此处省略

+ (NSData*)AES256Encrypt:(NSString*)strSource withKey:(NSString*)key {
    NSData *dataSource = [strSource dataUsingEncoding:NSUTF8StringEncoding];
    return [dataSource AES256EncryptWithKey:[key md5]];
}

+ (NSString*)AES256Decrypt:(NSData*)dataSource withKey:(NSString*)key {
    NSData *decryptData = [dataSource AES256DecryptWithKey:[key md5]];
    return [[NSString alloc] initWithData:decryptData encoding:NSUTF8StringEncoding];
}

@end

需要源码的盆友可以邮件联系。

ADC INL&DNL测试方法和实例 本文介绍了一种可操作的ADC INL和DNL的测试方法--直方图法(也称码密度法)。并实际使用该方法测试了两款芯片的ADC INL和DNL 阅读详情

相关推荐

华为OD机考双机位C卷 - 朋友圈个数(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 朋友圈个数(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 674

吐槽Mac OS 下libpomelo的安装过程

最近听说pomelo这个开源的游戏服务器框架不错,文档也比较详细(这都是听说,实际上.....还是接着往下看吧)于是拿来研究研究。因为做iphone游戏的缘故,所以打算在Mac OS X上安装,按照官方的文档指南,pomelo终于安装成功,除了node.js在安装过程中出过一些意外还是比较顺利。 接下来在安装客户端libpomelo库时按照官方地址https://github.com/NetEa

6841

【人工智能论文发表】基于医学病例文本和多模态大模型的医疗影像分割方法研究

摘要:本研究提出MMS-Former,一种基于级联多模态Transformer的文本引导医学图像分割框架。该模型创新性地将临床文本信息深度融入图像分割全过程,通过SwinUNETR提取视觉特征,ClinicalBERT编码病历文本,并在解码器的每个上采样阶段通过交叉注意力模块实现多级文本特征融合。实验表明,相比纯视觉模型,MMS-Former在Dice系数和IoU指标上分别提升3%以上,在处理边界模糊目标时表现尤为突出。模型还设计了结合Dice损失和图文对比损失的复合目标函数,确保分割精度与语义对齐。代码实

u012133341的博客 124

iOS DES加密解密

这里写代码//加密 - (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key { NSString *ciphertext = nil; const char *textBytes = [plainText UTF8String]; NSUInteger dataLength = [plain

BlingbringBling的博客 3870

Java 设计模式:代理模式Proxy

Java设计模式之:代理模式Proxy或Surrogate  代理模式的英文叫做Proxy或Surrogate,所谓代理,就是一个人或者一个机构代表一个机构采取行动。在一些情况下,一个客户不想活着不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起起到中介作用。代理的例子:Windows系统提供的快捷方法,可以使任何对象同时出现多个地方,而不必修改原对象。对快捷方式

9816

ios RSA 加密 解密

1.参考链接https://www.jianshu.com/p/43f7fc8d8e14

u012106239的博客 904

iOS,一行代码进行RSA、DES 、AES、MD5加密解密

加密的Demo 最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用Java开发的,客户端要同时支持多平台(Android、iOS),在处理iOS的数据加密的时候遇到了一些问题。起初采取的方案是DES加密,老大说DES加密是对称的,网络抓包加上反编译可能会被破解,故采取RSA方式加密。RSA加密时需要公钥和私钥,客户端保存公钥加密数据,服务器保

努力,可能成功!放弃,注定失败! 2390

ios 加密

0728 加密 MD5加密 可解 因为有MD5库 但是可以通过 加盐(也就是拼接字符串 在进行加密)的方法进行加密这样在解得时候就不会那么容易 也可以使用时间戳 进行加盐 加密 时间戳 可只用到分钟(例如:201707281724) base64 加密ios7以上直接有个加密解密方法 文章纯属笔记,如有雷同,纯属巧合 请忽略 转载于:https...

weixin_30532369的博客 65

学完这些,能做出微信吗?国庆节7天不知道能否撸出来一个,我要试试!!!---酷课堂iOS交流群问答整理(201809期)

新书即将上市: 这两天收到出版社的样书,预计这两周将陆续开始上架,感兴趣的小伙伴,到时可在天猫、当当、京东搜索“李发展”即可找到。                             本书内容简介和适合人群: 本书包含Swift 4.0语言、Cocoa Touch、视图控制器、控件、表格、网络、地图、音频、视频、动画、触摸、手势、故事板、CoreData、性能测试、机器学习、增强现...

互动教程网[www.hdjc8.com] 1万+

iOS RSA加密解密

一、使用openssl终端指令生成公钥和私钥证书,最后需要得到公钥证书(public_key.der)和私钥证书(private_key.p12) 1,打开终端前,在桌面新建文件夹CertificateFile(用来存放证书) 2,打开终端cd到Certificate File文件目录(在cd后空格直接拖文件到终端)回车 3,依次输入下面的指令: openssl genrsa -o

启程的博客 5724

iOS数据安全—加密解密「学习总结」

本文来自简书,原文地址:http://www.jianshu.com/p/1a7d57b60778 写在前面 在写项目中,数据的安全性至关重要,而仅仅用 POST 请求提交用户的隐私数据,还是不能完全解决安全问题。因此:我们经常会用到加密技术,比如说在登录的时候,我们会先把密码用MD5加密再传输给服务器 或者 直接对所有的参数进行加密再POST到服务器。 记得最初接触加密,也不懂,就根据

努力,可能成功!放弃,注定失败! 4700

iOS-各种加密/解密算法

随着互联网的迅速发展,我们的隐私越来越少,随之安全也变得极其重要. 在生活中,我们不仅要保护我们的隐私,在虚拟世界,我们也需要保证隐私的安全. 我们移动端,服务于用户,就有责任保护用户的个人信息安全,下面粗略介绍几个开发中常用的解密或者解密方法:base64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一 Base64编码可用于在HTTP环境下传递较长的标识信息 Base64 也

Mazy's Blog 3127

swiftUI之如何进行sha256加密

swiftUI之如何进行sha256加密方法 方法 扩展data支持将字符串进行sha256加密 import Foundation import CommonCrypto import CryptoKit func hexString(_ iterator:Array<UInt8>.Iterator) -> String{ return iterator.map{ String(format: "%02x", $0) }.joined() } exten

忆,学海之路 828

Mac os x Snow Leopard 上找不到.bash_profile该怎么办?

最近打算从windows转向Mac平台,首先原来开发Android的环境要重新在Mac上搭建,结果在配置环境变量时找不到.bash_profile文件。查过很多资料解决方案都很笼统,结果还是在英文网站上找到解决方法。 1. 启动终端Terminal2. 进入当前用户的home目录    输入cd ~3. 创建.bash_profile    输入touch .bash_pr

9257

硬盘维修工具PC3000完全剖析.rar

硬盘维修工具PC3000完全剖析.rar硬盘维修工具PC3000完全剖析.rar硬盘维修工具PC3000完全剖析.rar硬盘维修工具PC3000完全剖析.rar

python实现NWPU计算流体力学大作业项目源码95分以上大作业项目

python实现NWPU计算流体力学大作业项目源码,代码完整,下载即可使用,无需修改即可运行,高分大作业项目。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

上一篇: objective-c自定义类对象的序列化和反序列化
下一篇: .NET引用Excel操作时无法关闭Excel.exe进程的解决方法
hsyj_0001
博客等级 码龄22年 22粉丝 15原创
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值