版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.12.16 |
前言
NSString是我们经常使用的一个类,但是苹果的API很多用起来不是那么方便,需要根据我们特殊需求进行个性化的改变和定制,接下来,我就写一个NSString分类工具,以后在使用的时候直接调用这个分类中的方法,可以实现很多小的功能,用起来也很方便。相关代码已经上传至GitHub - 刀客传奇。感兴趣的可以看我上面写的几篇。
1. 一个实用的NSString分类工具 (一)—— 玩转数字
2. 一个实用的NSString分类工具(二) —— 获取拼音大写首字母和转义等
Json转数组NSArray
下面还是看代码
- (NSArray *)jj_jsonArray;
- (NSArray *) jj_jsonArray
{
id json = [self jsonValue];
return [json isKindOfClass:NSArray.class] ? json : nil;
}
- (id)jsonValue
{
NSError *error = nil;
id jsonObj = [NSJSONSerialization JSONObjectWithData:[self dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:&error];
if (error) {
NSLog(@"JSON: %@\nparse error: %@", self, error);
return jsonObj;
}
return jsonObj;
}
这里就不给大家验证了,大家自己验证吧。
json转NSString字符串
下面还是先看代码
+ (NSString *)jj_stringWithJSONObject:(id)object;
+ (NSString *)jj_stringWithJSONObject:(id)object
{
NSError *error = nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];
if (error) {
NSLog(@"JSON generate error: %@", error);
return nil;
}
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
这就不给大家验证了。
json转字典NSDictionary
还是直接看代码
- (NSDictionary *)jj_jsonDictionary;
- (NSDictionary *) jj_jsonDictionary
{
id json = [self jsonValue];
return [json isKindOfClass:NSDictionary.class] ? json : nil;
}
- (id)jsonValue
{
NSError *error = nil;
id jsonObj = [NSJSONSerialization JSONObjectWithData:[self dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:&error];
if (error) {
NSLog(@"JSON: %@\nparse error: %@", self, error);
return jsonObj;
}
return jsonObj;
}
这里也就不给大家验证了。
CBC模式对齐加密
下面看代码
- (NSData *)jj_encryptWithCBC:(NSString *)key;
- (NSData *) jj_encryptWithCBC:(NSString *)key
{
NSData *textData = [self dataUsingEncoding:NSUTF8StringEncoding];
NSUInteger dataLength = [textData length];
size_t bufferSize = dataLength + kCCBlockSizeDES;
unsigned char buffer[bufferSize];
memset(buffer, 0, sizeof(buffer));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String], kCCKeySizeDES,
[key UTF8String],
[textData bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
return data;
}
return nil;
}
这里也不给大家验证了。
ECB模式对齐加密
还是先看代码
- (NSData *)jj_encryptWithECB:(NSString *)key;
- (NSData *) jj_encryptWithECB:(NSString *) key
{
NSData *textData = [self dataUsingEncoding:NSUTF8StringEncoding];
NSUInteger dataLength = [textData length];
size_t bufferSize = dataLength + kCCBlockSizeDES;
unsigned char buffer[bufferSize];
memset(buffer, 0, sizeof(buffer));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
kCCOptionPKCS7Padding|kCCOptionECBMode,
[key UTF8String], kCCKeySizeDES,
NULL,
[textData bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
return data;
}
return nil;
}
同样不给大家验证了。
DES解密
- (NSString *)jj_decryptUseDESkey:(NSString *)key;
-(NSString*) jj_decryptUseDESkey:(NSString*)key
{
// 利用 GTMBase64 解碼 Base64 字串
NSData* cipherData = [GTMBase64 decodeString:self];
size_t bufferSize = [cipherData length] + kCCBlockSizeDES;
unsigned char buffer[bufferSize];
memset(buffer, 0, sizeof(buffer));
size_t numBytesDecrypted = 0;
// IV 偏移量不需使用
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String],
kCCKeySizeDES,
[key UTF8String],
[cipherData bytes],
[cipherData length],
buffer,
bufferSize,
&numBytesDecrypted);
NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] ;
}
return plainText;
}
后记
未完,待续~~~