ForgetSou | Blog

❤ 武统台湾 刻不容缓 ❤

0%

1. 简介

img

2. 性能指标

性能指标是面向用户的各种属性。每个指标可能是一个或多个可测量工程参数的一个要素。

2.1 内存

内存涉及运行应用所需的 RAM 最小值,以及应用消耗的内存平均值和峰值。最小内存值,会严重限制硬件,而更高的内存平均值和峰值意味着更多的后台应用会被强制关闭。

同时还要确保没有泄漏内存。随时间流逝而持续增长的内存消耗意味着,应用很可能会因 为内存不足的异常而崩溃。

2.2 电量消耗

在编写高性能代码时,电量消耗是一个需要重点处理的重要因素。就执行时间和 CPU 资 源的利用而言,我们不仅要实现高效的数据结构和算法,还需要考虑其他的因素。如果某 个应用是个电池黑洞,那么一定不会有人喜欢它。

电量消耗不仅仅与计算 CPU 周期有关,还包括高效地使用硬件。除了要实现电量消耗最 小化,还要确保不会影响用户体验。

阅读全文 »

一. 简述

1. 加解密方式有很多,iOS常用的加密方式有:

  • 哈希算法: MD5、SHA
  • 对称加密算法: DES、3DES、AES
  • 非对称加密算法: RSA

本文主要讲述AES/ECB/PKCS5Padding加解密方式

二. 示例

1. 加密

#define k_aesECBKey                         @"AAAAA"// AAAAA只是示例,换成自己喜欢的字符串
// 加密
+ (NSString *)encryptText:(NSString *)text {
CCCryptorStatus status = kCCSuccess;
NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];
NSData *result = [data dataEncryptedUsingAlgorithm:kCCAlgorithmAES128
key:k_aesECBKey
initializationVector:nil
options:(kCCOptionPKCS7Padding|kCCOptionECBMode)
error:&status];
if (status != kCCSuccess) {
return @"";
}
return [self convertDataToHexStr:result];
}
/**
将十六进制data转为十六进制字符串

@param data 十六进制data
@return 十六进制字符串
*/
+ (NSString *)convertDataToHexStr:(NSData *)data {
if (!data || [data length] == 0) {
return @"";
}
NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];

[data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
unsigned char *dataBytes = (unsigned char*)bytes;
for (NSInteger i = 0; i < byteRange.length; i++) {
NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];
if ([hexStr length] == 2) {
[string appendString:hexStr];
} else {
[string appendFormat:@"0%@", hexStr];
}
}
}];
return string;
}

2. 解密

// 解密
+ (NSString *)decryptHexStr:(NSString *)hexStr {
NSData *data = [self convertHexStrToData:hexStr];
CCCryptorStatus status = kCCSuccess;
NSData* result = [data decryptedDataUsingAlgorithm:kCCAlgorithmAES128
key:k_aesECBKey
initializationVector:nil // ECB解密不会用到iv
options:(kCCOptionPKCS7Padding|kCCOptionECBMode)
error:&status];
if (status != kCCSuccess) {
return @"";
}
return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
}

+ (NSData *)convertHexStrToData:(NSString *)str {
if (!str || [str length] == 0) {
return nil;
}

NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];

NSRange range;

if ([str length] % 2 == 0) {
range = NSMakeRange(0, 2);

} else {
range = NSMakeRange(0, 1);
}

for (NSInteger i = range.location; i < [str length]; i+= 2){
unsigned int anInt;
NSString*hexCharStr= [str substringWithRange:range];

NSScanner*scanner= [[NSScanner alloc] initWithString:hexCharStr];

[scanner scanHexInt:&anInt];

NSData *entity= [[NSData alloc] initWithBytes:&anInt length:1];

[hexData appendData:entity];

range.location+= range.length;

range.length= 2;
}

return hexData;
}

⚠️ NSData+CommonCrypto.h

阅读全文 »