admin
2023-04-21 0b3a4aaf99ea251bc8e27b96115288f0988fcffe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
//
//  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