407 lines
13 KiB
Mathematica
Raw Normal View History

//
// 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;
}
//ipv6ipv4使
+ (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