ios常见加密解密方法

news/2024/11/29 8:59:21/

在其他平台中经常会计算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

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


http://www.ppmy.cn/news/230619.html

相关文章

iPhone 和 iPad 隐藏照片或视频教程

在新版iOS系统中&#xff0c;新增了隐藏照片的功能&#xff0c;macw今天就为大家介绍iPhone照片如何隐藏和查找隐藏照片。 如何在 iPhone 上隐藏图片和视频 打开 照片。点击右上角的 选择 &#xff0c;然后选择要隐藏的照片。 注意&#xff1a;您可以从相册中选择照片。选择后…

点击iPhone/iPad上的加密相册或保险箱提示“无法安装加密相册或保险箱,App Store已不提供此应用”解决方案

点击iPhone/iPad上的加密相册、保险箱、加密相册Pro、保险箱Pro提示“无法安装加密相册或保险箱&#xff0c;App Store已不提供此应用”解决方案 1.本文适用条件&#xff1a; 1&#xff09;任何时候&#xff0c;遇到任何情况&#xff0c;不要删除app&#xff0c;不要卸载app&a…

三大秘籍,教你学会苹果手机相册加密

“这个女生是谁&#xff1f;”当女朋友在你手机相册里看到了前任的照片&#xff0c;你该如何解释&#xff1f;&#xff08;解释什么&#xff0c;恋爱时手机里就不该有前任的照片。&#xff09;那当手机里有一些隐私或者不想被别人看到的照片该怎么做&#xff1f;如何将苹果手机…

苹果手机怎么隐藏照片?给iPhone相册上锁的3种方法

iPhone手机中保存了大量隐私照片&#xff0c;担心被他人看见&#xff1f;如何将苹果手机照片加密隐藏&#xff1f; 今天小编将教你三种方法给苹果手机相册加密&#xff0c;为你的隐私保驾护航&#xff01; 一、隐藏相册 苹果手机是自带相册隐藏功能的&#xff0c;只需将自己…

图解HTTP书籍学习2

确保Web安全的HTTPS HTTP的缺点 ●通信使用明文&#xff08;不加密&#xff09;&#xff0c;内容可能会被窃听 ●不验证通信方的身份&#xff0c;因此有可能遭遇伪装 ●无法证明报文的完整性&#xff0c;所以有可能已遭篡改 加密处理防止被窃听 通信的加密 一种方式就是…

想面试Java后端,至少这些你都要会吧

跨越Java后端面试的最重要关卡&#xff0c;就是对技术知识的准备。但难点在于&#xff0c;后端技术栈的内容繁杂&#xff0c;你需要掌握一个广泛的领域。那么&#xff0c;为了保证你能够顺利面试Java后端岗位&#xff0c;下面分享我认为你必须要掌握的技术&#xff1a; 1. Jav…

[10/12]

修改标准IO时候写的时钟代码&#xff0c;要求输入q后&#xff0c;能够退出该程序。 #include <stdio.h> #include <time.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h>void* callBack(void* arg) {char c;while(1){scanf(…

Win12系统或新增“灵动岛”设计 截图曝光

中关村在线消息&#xff1a;近日&#xff0c;在微软Ignite大会上曝光了一张全新的系统截图&#xff0c;疑似正在开发的Windows 12系统&#xff0c;但是微软方面表示了否认&#xff0c;称该截图用于展示Windows“Next Valley”系统的设计理念。 该截图显示&#xff0c;主屏幕上面…