357 lines
11 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;
}
@end