//
|
// NSString+YTH.m
|
// PapayaPlayerDaqo
|
//
|
// Created by 味口 on 15-6-16.
|
// Copyright (c) 2015年 wgj. All rights reserved.
|
//
|
|
#import "NSString+YTH.h"
|
#import "GTMBase64.h"
|
|
@implementation NSString (YTH)
|
|
#pragma mark 获取手机唯一标识符
|
+ (NSString *)DeviceIdentifier{
|
return [[UIDevice currentDevice].identifierForVendor UUIDString];
|
}
|
|
|
#pragma mark md5进行一个加密
|
+ (NSString *)md5:(NSString *)str
|
{
|
const char *cStr = [str UTF8String];
|
unsigned char result[16];
|
CC_MD5(cStr, (int)strlen(cStr), result); // This is the md5 call
|
return [NSString stringWithFormat:
|
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
|
result[0], result[1], result[2], result[3],
|
result[4], result[5], result[6], result[7],
|
result[8], result[9], result[10], result[11],
|
result[12], result[13], result[14], result[15]
|
];
|
}
|
|
#pragma mark 用于DES的解密 其中KEY=VW1nT3R2WVk= 初始向量=WXlIeEhsY0o=
|
+ (NSString *)decrypt:(NSString *)sText
|
{
|
const void *dataIn;
|
size_t dataInLength;
|
|
//解码 base64
|
NSData *decryptData = [GTMBase64 decodeData:[sText dataUsingEncoding:NSUTF8StringEncoding]];//转成utf-8并decode
|
dataInLength = [decryptData length];
|
dataIn = [decryptData bytes];
|
|
/*
|
加密解密的思路分析
|
DES加密 :用CCCrypt函数加密一下,然后用base64编码下,传过去
|
DES解密 :把收到的数据根据base64,decode一下,然后再用CCCrypt函数解密,得到原本的数据
|
*/
|
CCCryptorStatus ccStatus;
|
uint8_t *dataOut = NULL; //可以理解位type/typedef 的缩写(有效的维护了代码,比如:一个人用int,一个人用long。最好用typedef来定义)
|
size_t dataOutAvailable = 0; //size_t 是操作符sizeof返回的结果类型
|
size_t dataOutMoved = 0;
|
|
dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
|
dataOut = malloc( dataOutAvailable * sizeof(uint8_t));
|
memset((void *)dataOut, 0x0, dataOutAvailable);//将已开辟内存空间buffer的首 1 个字节的值设为值 0
|
|
NSString *key = @"VW1nT3R2WVk=";
|
NSData *datakey= [key dataUsingEncoding:NSUTF8StringEncoding];
|
|
NSString *vi = @"WXlIeEhsY0o=";
|
NSData *datavi= [vi dataUsingEncoding:NSUTF8StringEncoding];
|
|
//CCCrypt函数 加密/解密
|
ccStatus = CCCrypt(kCCDecrypt,// 加密/解密
|
kCCAlgorithmDES,// 加密根据哪个标准(des,3des,aes。。。。)
|
kCCOptionPKCS7Padding,// 选项分组密码算法(des:对每块分组加一次密 3DES:对每块分组加三个不同的密)
|
[[GTMBase64 decodeData:datakey] bytes], //密钥 加密和解密的密钥必须一致
|
kCCKeySizeDES,// DES 密钥的大小(kCCKeySizeDES=8)
|
[[GTMBase64 decodeData:datavi] bytes], // 可选的初始矢量
|
dataIn, // 数据的存储单元
|
dataInLength,// 数据的大小
|
(void *)dataOut,// 用于返回数据
|
dataOutAvailable,
|
&dataOutMoved);
|
|
NSString *result = nil;
|
|
//得到解密出来的data数据,改变为utf-8的字符串
|
result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding];
|
|
return result;
|
}
|
|
#pragma mark 判断播放链接的3种情况
|
+ (NSString *)judgeNSStringUrl:(NSString *)url{
|
NSString *str;
|
|
if (url.length>21) {
|
if ([[url substringWithRange:NSMakeRange(0, 21)] isEqualToString:@"http://cloud.letv.com"]) {//是否是http://cloud.letv.com开头
|
return url;
|
}
|
}
|
|
|
if (url.length>4) {
|
if ([[url substringWithRange:NSMakeRange(0, 4)] isEqualToString:@"http"]) {//是http开头的
|
|
str = [NSString stringWithFormat:@"http://flv.wandoujia.com/hack/flv/download?url=%@?ref=pinapple&format=HIGH&f=android&v=2.2.0",url];
|
|
}else{//不是http开头的
|
str = [NSString stringWithFormat:@"%@/BuWan%@",domainHTTP,url];
|
}
|
}
|
|
return str;
|
}
|
|
@end
|