407 lines
13 KiB
Objective-C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// HttpManager.m
// myhome
//
// Created by hkh on 16/11/6.
//
#import "Pub.h"
#import <CommonCrypto/CommonDigest.h>
@interface Pub (){
}
@end
@implementation Pub{
}
+ (AppDelegate *)getApp{
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication]delegate];
return app;
}
+ (sysInfo *)getSysInfo{
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication]delegate];
return app.sysinfo;
}
+ (BaseNavigationController*)getNav{
UITabBarController *tab = (UITabBarController *)[Pub getApp].window.rootViewController;
if(tab){
UINavigationController *nav = tab.viewControllers[tab.selectedIndex];
return nav;
}
return nil;
}
+ (NSString *)MD5:(NSString *)input //大写
{
const char *cStr = [input UTF8String];
unsigned char digest[16];
CC_MD5( cStr, (CC_LONG)strlen(cStr), digest ); // This is the md5 call
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[output appendFormat:@"%02X", digest[i]];
return output;
}
+ (NSString *)md5_:(NSString *)input //大写
{
const char *cStr = [input UTF8String];
unsigned char digest[16];
CC_MD5( cStr, (CC_LONG)strlen(cStr), digest ); // This is the md5 call
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
return output;
}
+ (NSDictionary *)DictionaryWithJsonString:(NSString *)jsonString {
if (jsonString == nil) { return nil; }
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err];
if(err) {
NSLog(@"json解析失败%@",err);
return nil;
}
return dic;
}
+ (void)addHead:(NSString *)head toByte:(Byte *)bb
{
Byte *tempbb;
NSString *tempS;
NSData *tempData;
tempS = @"XXXCID";
tempData = [tempS dataUsingEncoding:NSUTF8StringEncoding];
tempbb = (Byte *)[tempData bytes];
memcpy(bb, tempbb, 6);
}
+ (void)addEquid:(NSString *)equId toByte:(Byte *)bb at:(int)pos
{
Byte *tempbb;
NSString *tempS;
NSData *tempData;
//本地
tempS = equId;
tempData = [tempS dataUsingEncoding:NSUTF8StringEncoding];
tempbb = (Byte *)[tempData bytes];
memcpy(bb+pos, tempbb, [tempData length]);
for (int i=(int)[tempData length]; i<20; i++){
bb[i+pos] = 0;
}
}
+ (int)getBBlen:(Byte *)bb Len:(int)len{
for(int i=0; i<len; i++){
if (bb[i] == 0){
return i;
}
}
return len;
}
+ (int)addGKB:(NSString *)equId toByte:(Byte *)bb at:(int)pos
{
Byte *tempbb;
NSString *tempS;
NSData *tempData;
//本地
NSStringEncoding gbkEncoding =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
tempS = equId;
tempData = [tempS dataUsingEncoding:gbkEncoding];
tempbb = (Byte *)[tempData bytes];
memcpy(bb+pos, tempbb, [tempData length]);
return (int)[tempData length] ;
}
+ (void)addIp:(NSString *)ip toByte:(Byte *)bb at:(int)pos
{
NSArray *tempA = [ip componentsSeparatedByString:@"."];
for (int i=0; i<tempA.count; i++){
bb[i+pos] = [(NSString *)[tempA objectAtIndex:i] intValue];
}
}
+ (void)addMac:(NSString *)mac toByte:(Byte *)bb at:(int)pos
{
NSArray *tempA = [mac componentsSeparatedByString:@":"];
for (int i=0; i<tempA.count; i++){
bb[i+pos] = [self Ox:(NSString *)[tempA objectAtIndex:i]];
bb[i+pos] = [self Ox:(NSString *)[tempA objectAtIndex:i]];
}
}
+ (void)addInt:(int)port toByte:(Byte *)bb at:(int)pos
{
bb[pos+3] = (Byte)((port & 0xFF000000) >> 24);
bb[pos+2] = (Byte)((port & 0x00FF0000) >> 16);
bb[pos+1] = (Byte)((port & 0x0000FF00) >> 8);
bb[pos] = (Byte)((port & 0x000000FF) );
}
+ (void)addShort:(int)port toByte:(Byte *)bb at:(int)pos
{
bb[pos+1] = (Byte)((port & 0x0000FF00) >> 8);
bb[pos] = (Byte)((port & 0x000000FF) );
}
+ (short)getShortFromByte:(Byte *)bb at:(int)pos
{
return bb[pos] + bb[pos+1]*256;
}
+ (int)Ox:(NSString *)v
{
int n = 0;
int p = 0;
NSString *s;
for (int i=0; i<v.length; i++){
s = [v substringWithRange:NSMakeRange(i, 1)];
if ([s isEqualToString:@"A"]|[s isEqualToString:@"a"]) p=10;
else if ([s isEqualToString:@"B"]|[s isEqualToString:@"b"]) p=11;
else if ([s isEqualToString:@"C"]|[s isEqualToString:@"c"]) p=12;
else if ([s isEqualToString:@"D"]|[s isEqualToString:@"d"]) p=13;
else if ([s isEqualToString:@"E"]|[s isEqualToString:@"e"]) p=14;
else if ([s isEqualToString:@"F"]|[s isEqualToString:@"f"]) p=15;
else p = [s intValue];
for (int j=i+1; j<v.length; j++){
p = p*16;
}
n += p;
}
return n;
}
+ (NSString *)getLocalIP
{
dispatch_async(dispatch_get_main_queue(), ^{//转到主线程处理
NSString *address = @"error";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
// retrieve the current interfaces - returns 0 on success
success = getifaddrs(&interfaces);
if (success == 0) {
// Loop through linked list of interfaces
temp_addr = interfaces;
while(temp_addr != NULL) {
if(temp_addr->ifa_addr->sa_family == AF_INET) {
// Check if interface is en0 which is the wifi connection on the iPhone
if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
// Get NSString from C String
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
}
}
temp_addr = temp_addr->ifa_next;
}
}
// Free memory
freeifaddrs(interfaces);
[Pub getApp].sysinfo.equip = address;
});
return [Pub getApp].sysinfo.equip;
}
//针对ipv6网络环境下适配ipv4环境直接使用原来的地址
+ (NSString *)getMac
{
int mib[6];
size_t len;
char *buf;
unsigned char *ptr;
struct if_msghdr *ifm;
struct sockaddr_dl *sdl;
mib[0] = CTL_NET;
mib[1] = AF_ROUTE;
mib[2] = 0;
mib[3] = AF_LINK;
mib[4] = NET_RT_IFLIST;
if ((mib[5] = if_nametoindex("en0")) == 0) {
printf("Error: if_nametoindex error/n");
return NULL;
}
if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
printf("Error: sysctl, take 1/n");
return NULL;
}
buf = malloc(len);
if (buf == NULL) {
printf("Could not allocate memory. error!/n");
return NULL;
}
if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
//printf("Error: sysctl, take 2");
free(buf);
return NULL;
}
ifm = (struct if_msghdr *)buf;
sdl = (struct sockaddr_dl *)(ifm + 1);
ptr = (unsigned char *)LLADDR(sdl);
NSString *outstring = [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];
free(buf);
return [outstring uppercaseString];
}
+ (NSString *)getEquidFrombb:(Byte *)bb at:(int)pos {
NSString *equid = nil;
int equlen=8;
if (bb[pos]==77) {//M
equlen=8;
}
else if(bb[pos]==87) {//W
equlen=5;
}
else if(bb[pos]==72){//H
equlen=12;
}
else if(bb[pos]==83){//S
equlen=12;
}
else if(bb[pos]==0x50){//P
equlen=12;
}
else if(bb[pos]==0x54){//T
equlen=16;
}
else{
equlen=12;
}
Byte tempbb[equlen];
memcpy(tempbb, bb+pos, equlen);
NSData *aadata = [[NSData alloc] initWithBytes:tempbb length:equlen];
NSStringEncoding gbkEncoding =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
equid = [[NSString alloc] initWithData:aadata encoding:gbkEncoding];
return equid;
}
+ (NSString *)NSdata2String:(NSData *)data{
NSStringEncoding gbkEncoding =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
return [[NSString alloc] initWithData:data encoding:gbkEncoding];
}
+ (NSData *)AES128_Encrypt:(NSString *)key encryptData:(NSData *)data{
char keyPtr[kCCKeySizeAES128+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
//无向量
// char ivPtr[kCCKeySizeAES128+1];
// memset(ivPtr, 0, sizeof(ivPtr));
// [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
keyPtr,
kCCBlockSizeAES128,
nil,
[data bytes],
dataLength,
buffer,
bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}
+ (NSData *)AES128_Decrypt:(NSString *)key encryptData:(NSData *)data{
char keyPtr[kCCKeySizeAES128+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
//无向量
// char ivPtr[kCCKeySizeAES128+1];
// memset(ivPtr, 0, sizeof(ivPtr));
// [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
keyPtr,
kCCBlockSizeAES128,
nil,
[data bytes],
dataLength,
buffer,
bufferSize,
&numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer);
return nil;
}
//将NSData转换成十六进制的字符串则可使用如下方式:
+ (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;
}
//将十六进制字符串转换为二进制数据
+ (NSData *)dataFromHexString:(NSString *)hexString {
// 去除字符串中的空格和换行符
NSString *cleanedString = [hexString stringByReplacingOccurrencesOfString:@" " withString:@""];
cleanedString = [cleanedString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
// 检查字符串长度是否为偶数
if (cleanedString.length % 2 != 0) {
// 如果长度为奇数,可以根据需要选择在字符串前面添加或去除一个字符
// 例如,你可以选择在前面添加一个零,或者去除最后一个字符
// cleanedString = [@"0" stringByAppendingString:cleanedString];
// 或者
// cleanedString = [cleanedString substringToIndex:cleanedString.length - 1];
}
// 使用一个循环将每两个字符转换为一个字节
NSMutableData *data = [NSMutableData data];
for (NSInteger i = 0; i < cleanedString.length; i += 2) {
NSString *byteString = [cleanedString substringWithRange:NSMakeRange(i, 2)];
NSScanner *scanner = [NSScanner scannerWithString:byteString];
unsigned int byteValue;
[scanner scanHexInt:&byteValue];
uint8_t byte = (uint8_t)byteValue;
[data appendBytes:&byte length:1];
}
return data;
}
@end