//添加MD5校验 char *ALI_buildRequestMysign(ALI_MAP *head) { uint8 len,i,buf[16] = {0}; char *md5,*list; list = ALI_createLinkString(head); strcat(list,ali_key); MDString(list,buf); md5 = malloc(36); memset(md5,0,sizeof(36)); for(i = 0;i < 16;i++){ sprintf(&md5[i * 2],"%02d",buf[i]); } md5[32] = '\0'; return md5; }
/* Digests a reference suite of strings and prints the results. */ static void MDTestSuite () { printf("MD%d test suite:\n", MD); MDString(""); MDString("a"); MDString("abc"); MDString("message digest"); MDString("abcdefghijklmnopqrstuvwxyz"); MDString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); MDString("1234567890123456789012345678901234567890\ 1234567890123456789012345678901234567890"); }
/* Digests a reference suite of strings and prints the results. */ int main(void) { printf("MD%d test suite:\n", MD); MDString(""); MDString("a"); MDString("abc"); MDString("message digest"); MDString("abcdefghijklmnopqrstuvwxyz"); MDString("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789"); MDString("1234567890123456789012345678901234567890" "1234567890123456789012345678901234567890"); return 0; }
/* Main driver. Arguments (may be any combination): -sstring - digests string -t - runs time trial -x - runs test script filename - digests file (none) - digests standard input */ int main (int argc, char *argv []) { int i; if (argc > 1) for (i = 1; i < argc; i++) if (argv [i][0] == '-' && argv [i][1] == 's') MDString (argv[i] + 2); else if (strcmp (argv [i], "-t") == 0) MDTimeTrial (); else if (strcmp (argv [i], "-x") == 0) MDTestSuite (); else MDFile (argv[i]); else MDFilter (); return (0); }
void search() { char str[1000],val[500],hexval[1000]; int d[1000],i; lptr z; fflush(stdin); printf("\nEnter the key to be searched:"); gets(str); FILE *fp1,*fp; fp1 = fopen("hfile.txt","w+"); fclose(fp1); MDString(str); fp=fopen("hfile.txt","r"); fscanf(fp,"%s",hexval); fclose(fp); fp1=fopen("hashvalues.txt","w+"); fclose(fp1); convert1(hexval); fp1=fopen("hashvalues.txt","r"); fscanf(fp1,"%s",val); fclose(fp1); for(i=0;i<128;i++) d[i]=val[i]-48; z=closest(d,root); if(!strcmp(z->key,str)) printf("\nSuccessful\n"); else printf("\nNO\n"); }
/* * LoginSendInfo: Send login information (username, password, etc.) to server. */ void LoginSendInfo(void) { unsigned char buf[ENCRYPT_LEN + 1]; GetSystemStats(&sysinfo); // Encrypt password MDString(config.password, buf); buf[ENCRYPT_LEN] = 0; debug(("Got partner code of %d.\n", (sysinfo.reserved & 0xFF00) >> 8)); // Load the RSB hash from LoginSendInfo to ensure we have an up-to-date hash. LoadRSBHash(); RequestLogin(MAJOR_REV, MINOR_REV, sysinfo.platform, sysinfo.platform_major, sysinfo.platform_minor, sysinfo.memory, sysinfo.chip, sysinfo.screen_width, sysinfo.screen_height, sysinfo.color_depth, sysinfo.bandwidth, sysinfo.reserved, config.username, buf, GetRSBHash()); }
/* Digests a reference suite of strings and prints the results. */ void MDTestSuite() { printf ("MD5 test suite:\n"); MDString(""); MDString("a"); MDString("abc"); MDString("message digest"); MDString("abcdefghijklmnopqrstuvwxyz"); MDString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); MDString("12345678901234567890123456789012345678901234567890123456789012345678901234567890"); printf("correct output:\n"); printf("MD5(\"\") = d41d8cd98f00b204e9800998ecf8427e\n"); printf("MD5(\"a\") = 0cc175b9c0f1b6a831c399e269772661\n"); printf("MD5(\"abc\") = 900150983cd24fb0d6963f7d28e17f72\n"); printf("MD5(\"message digest\") = f96b697d7cb7938d525a2f31aaf161d0\n"); printf("MD5(\"abcdefghijklmnopqrstuvwxyz\") = c3fcd3d76192e4007dfb496cca67e13b\n"); printf("MD5(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\") = d174ab98d277d9f5a5611c2c9f419d9f\n"); printf("MD5(\"12345678901234567890123456789012345678901234567890123456789012345678901234567890\") = 57edf4a22be3c955ac49da2e2107b67a\n"); }
void EventHandler::processPaymentVerify(EventCmd &e,vector<string> &check_cmd) { //if(check_cmd.size()!=4) return; /* uid_type uid; bool check = safeAtoll(check_cmd[1], uid); if(check == false) return; User * user = safeGetUser(uid, CMD_PAYMENTVERIFY, e.fd_, check_cmd[2]); if(user == NULL) return; string input = e.cmd_.substr(e.cmd_.find('{')); if(input.size()>=3000){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } char * outputc = (char * ) malloc (4*((input.length()+2)/3)); if(outputc == NULL){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } base64_encode((unsigned char * )input.c_str(), (int)input.length(), (unsigned char *)outputc, (int)4*((input.length()+2)/3)); string output = string(outputc,(int)4*((input.length()+2)/3)); free(outputc); string * test = new string("{\"receipt-data\":\"" + output + "\"}"); //pp->verify_info = &check_cmd[3]; pp->verify_info = test; pthread_create(&tid,NULL,verify,(void *)pp); */ //read params uid_type uid; int server_id; string product_id; bool check = safeAtoll(check_cmd[1], uid); if(check == false)return; if(check_cmd[3].size()>64 ||check_cmd[3].size()<=0||check_cmd[5].size()>64 ||check_cmd[5].size()<=0) return; //string tran_id = check_cmd[3]; string * tran_id = new string(check_cmd[3]); check = safeAtoi(check_cmd[4], server_id); if(check == false) return; product_id = check_cmd[5]; sconfig * sc = game_config.getSconfig(server_id); if(sc == NULL){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_INFO_ERROR); return; } if(game_config.payment_.find(product_id) == game_config.payment_.end()){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_INFO_ERROR); return; } //try to load PaymentInfo *pi = NULL; check = dh_->loadPayment(*tran_id, pi); if(check == false){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } string input = e.cmd_.substr(e.cmd_.find('{')); if(input.size()>=3000){ //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } char * outputc = (char *) malloc (4*((input.length()+2)/3)); if(outputc == NULL){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } base64_encode((unsigned char * )input.c_str(), (int)input.length(), (unsigned char *)outputc, (int)4*((input.length()+2)/3)); string output = string(outputc,(int)4*((input.length()+2)/3)); free(outputc); //string * test = new string("{\"receipt-data\":\"" + output + "\"}"); //check string checkcode = MDString(output.c_str()); if(pi == NULL){ pi = new PaymentInfo(*tran_id,product_id,checkcode); if(pi == NULL){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } //pi->tran_id_ = tran_id; pi->uid_ = uid; pi->pay_time_ = time(NULL); //pi->product_id_ = product_id; pi->server_id_ = server_id; pi->status_ = PAYMENT_STATUS_REQUEST_RECEIVED; pi->status_ = PAYMENT_STATUS_VERIFY_SEND; //pi->check_info_ = checkcode; check = dh_->addNewPayment(pi); if(check == false || dh_->db_error_ != 0){ delete pi; sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } }else{ if(uid != pi->uid_ || server_id_ != pi->server_id_ || product_id != pi->product_id_ || checkcode != pi->check_info_){ delete pi; //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH); sendErrorResponseFroPayment(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH, (*tran_id)); return; } if(pi->status_ == PAYMENT_STATUS_REQUEST_RECEIVED || pi->status_ == PAYMENT_STATUS_VERIFY_SUCC){ }else if(pi->status_ == PAYMENT_STATUS_VERIFY_SEND || pi->status_ == PAYMENT_STATUS_ADDCMD_SEND){ delete pi; sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME); return; }else if(pi->status_ == PAYMENT_STATUS_REQUEST_REFUSED || pi->status_ == PAYMENT_STATUS_ADDCMD_SUCC){ delete pi; //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_TRADE_COMPLETE); sendErrorResponseFroPayment(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_TRADE_COMPLETE, (*tran_id)); return; } } if(pi!=NULL){ delete pi; } string * test = new string("{\"receipt-data\":\"" + output + "\"}"); pthread_t tid; struct PaymentParam *pp; pp = (struct PaymentParam *) malloc (sizeof(PaymentParam)); if(pp == NULL) { sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } pp->uid = uid; pp->tran_id = tran_id; pp->eq = eq_; pp->fd_ = e.fd_; pp->verify_info = test; pp->server_id = server_id; pthread_create(&tid,NULL,verify,(void *)pp); return; }
int main(int argc, char *argv[]){ char nombre[MAX_LONG]; // Nombre de esta Bomba char *nombre_pointer= &nombre[0]; // para poder enviarlo por RPC int capMax; // Capacidad Máxima (Litros) char archivo[MAX_LONG]; // Nombre de archivo "DNS" // Datos de los servidores char* nombres[MAX_SERVERS]; char* direcciones[MAX_SERVERS]; int tiempos[MAX_SERVERS]; //tiempos de respuesta CLIENT *clnts[MAX_SERVERS]; // Validar y obtener argumentos del cliente argumentos_cliente(argc,argv,nombre,&inventario,&consumo,&capMax,archivo); obtener_lista_dns(archivo, nombres,direcciones); // creacion del archivo LOG del cliente char nombre_LOG[MAX_LONG]; sprintf(nombre_LOG,"log_%s.txt",nombre); LOG = fopen(nombre_LOG,"w"); fprintf(LOG,"Inventario inicial %d \n ", inventario); if(inventario == 0) fprintf(LOG,"Tanque vacio: 0 minutos \n"); if(inventario == capMax) fprintf(LOG,"Tanque full: 0 minutos \n"); // PEDIR TIEMPOS int k = 0; while ((direcciones[k]) != NULL){ clnts[k]= clnt_create (direcciones[k], SERVICIOPDVSA, SERVICIOPDVSAVERS, "tcp"); if(clnts[k] == NULL){ clnt_pcreateerror( direcciones[k] ); tiempos[k] = 500; k = k + 1; continue; } int *result = pedir_tiempo_1(NULL,clnts[k]); if ( result == (int *)NULL){ clnt_perror( clnts[k], "Error al conectar con servidor"); tiempos[k] = 500; }else{ tiempos[k]= *result; } k = k + 1; } // ORDENAR EL ARREGLO DE TIEMPOS y TODOS LOS DEMAS int i = 0 ; int minimo; int j; while (nombres[i]!=NULL){ minimo = i; j = i + 1; while (nombres[j]!=NULL){ if (tiempos[j] < tiempos[minimo]){ minimo = j; } j = j +1; } swap(&tiempos[i],&tiempos[minimo]); swapLetras(&nombres[i],&nombres[minimo]); swapLetras(&direcciones[i],&direcciones[minimo]); swapPointer(&clnts[i],&clnts[minimo]); i=i+1; } // Iniciar contador de tiempo pthread_t contador_tiempo; int tiempo = 0; pthread_create(&contador_tiempo,NULL,llevar_tiempo,&tiempo); /**** INICIO DE LA SIMULACION ****/ int r = 0; while (tiempo <= 480){ //Iterar sobre los servidores pidiendo gasolina if(direcciones[r] == NULL){ // Si llegamos al final de la lista, reiniciar. r = 0; usleep(100000); } if ((capMax-inventario)>=38000){ // Verificar si el servidor no respondió al pedir tiempos if (tiempos[r] == 500){ r = r +1; continue; } // Pedir gasolina al servidor num r, almacenar respuesta en buffer gasolina char gasolina[20]; char **result2 = pedir_gasolina_1( &nombre_pointer, clnts[r] ); if ( result2 == (char **)NULL){ clnt_perror( clnts[r], "Error al conectar con servidor"); r = r+1; continue; }else{ strcpy(gasolina,*result2); } // Procesar respuesta del servidor if (strcmp(gasolina,"noDisponible") == 0){ fprintf(LOG,"Peticion: %d minutos, %s , No disponible, %d litros \n", tiempo, nombres[r],inventario); // Pedir gasolina al siguiente servidor en la lista r = r + 1; continue; // si su ticket no esta vigente o no tiene ticket } else if ( strcmp(gasolina,"noTicket") == 0 ){ int *retoInt = pedir_reto_1(NULL,clnts[r]); // convertir el reto de int a string char retoStr[10]; sprintf(&retoStr[0],"%d",*retoInt); // Aplicar el algoritmo MD5 unsigned char respUChar[16]; MDString (&retoStr[0],&respUChar[0]); // Convertir la respuesta a String char respString[33]; int i; for(i = 0; i < 16; ++i) sprintf(&respString[i*2], "%02x", (unsigned int)respUChar[i]); // Para que RPC nos permita pasarlo como argumento char *respStr= (char*) &respString[0]; int *resp = enviar_respuesta_1(&respStr, clnts[r]); if ( *resp == -1){ fprintf(LOG,"Autenticacion Fallida \n"); r = r + 1; continue; }else{ fprintf(LOG,"Autenticacion Correcta\n"); continue; } } else { // El ticket aun sigue vigente . Esperar y recibir gasolina. fprintf(LOG,"Peticion: %d minutos, %s, OK, %d litros \n", tiempo, nombres[r],inventario); usleep((tiempos[r]+1)*100000); pthread_mutex_lock(&mutex); inventario = inventario + 38000; pthread_mutex_unlock(&mutex); fprintf(LOG,"Llegada Gandola: %d minutos, %d litros \n", tiempo,inventario); if (inventario==capMax){ fprintf(LOG,"Tanque Full: %d minutos\n",tiempo);} // Reiniciar la busqueda de servidores activos r = 0; } }// fin del if (que verifica si se necesita gasolina) }// Fin del while (Se acabó el tiempo) fclose(LOG); return 0; }
/* Main driver. Arguments (may be any combination): -sstring - digests string -t - runs time trial -x - runs test script filename - digests file (none) - digests standard input */ int main(int argc, char *argv[]) { int ch; char *p; char buf[HEX_DIGEST_LENGTH]; int failed; unsigned digest; const char* progname; if ((progname = strrchr(argv[0], '/')) == NULL) progname = argv[0]; else progname++; for (digest = 0; digest < sizeof(Algorithm)/sizeof(*Algorithm); digest++) if (strcasecmp(Algorithm[digest].progname, progname) == 0) break; if (digest == sizeof(Algorithm)/sizeof(*Algorithm)) digest = 0; failed = 0; checkAgainst = NULL; checksFailed = 0; while ((ch = getopt(argc, argv, "c:pqrs:tx")) != -1) switch (ch) { case 'c': checkAgainst = optarg; break; case 'p': MDFilter(&Algorithm[digest], 1); break; case 'q': qflag = 1; break; case 'r': rflag = 1; break; case 's': sflag = 1; MDString(&Algorithm[digest], optarg); break; case 't': MDTimeTrial(&Algorithm[digest]); break; case 'x': MDTestSuite(&Algorithm[digest]); break; default: usage(&Algorithm[digest]); } argc -= optind; argv += optind; if (*argv) { do { p = Algorithm[digest].File(*argv, buf); if (!p) { warn("%s", *argv); failed++; } else { if (qflag) printf("%s", p); else if (rflag) printf("%s %s", p, *argv); else printf("%s (%s) = %s", Algorithm[digest].name, *argv, p); if (checkAgainst && strcmp(checkAgainst,p)) { checksFailed++; if (!qflag) printf(" [ Failed ]"); } printf("\n"); } } while (*++argv); } else if (!sflag && (optind == 1 || qflag || rflag)) MDFilter(&Algorithm[digest], 0); if (failed != 0) return (1); if (checksFailed != 0) return (2); return (0); }
static void thread_write_fn(void *arg) { char *id = (char*) arg; char key[256], buf[256]; ACL_VSTRING *value = acl_vstring_alloc(__value_size); time_t begin, last, now; DICT_POOL_DB *db; int i, n, j; KEY *key_array; key_array = (KEY*) acl_mycalloc(__max, sizeof(KEY)); n = __value_size; acl_vstring_sprintf(value, "%u:", (unsigned) acl_pthread_self()); n -= LEN(value); for (i = 0; i < n; i++) ACL_VSTRING_ADDCH(value, 'v'); ACL_VSTRING_TERMINATE(value); time(&begin); last = begin; for (j = 0, i = __begin; i < __begin + __max; i++) { snprintf(buf, sizeof(buf), "%s:%s:%d", __key_pre, id, i); #if 0 MDString(buf, key, sizeof(key)); #else acl_uint64 k = acl_hash_crc64(buf, strlen(buf)); snprintf(key, sizeof(key), "%llu", k); #endif key_array[j++].key = acl_mystrdup(key); } if (__max <= 100) { printf("before sort\n"); for (i = 0; i < __max; i++) { printf("key[%d]: %s\n", i, key_array[i].key); } } if (__sort) qsort(key_array, __max, sizeof(KEY), cmp_fn); if (__max <= 100) { printf("after sort\n"); for (i = 0; i < __max; i++) { printf("key[%d]: %s\n", i, key_array[i].key); } } for (i = 0; i < __max; i++) { char *ptr; size_t size; db = dict_pool_db(__dict_pool, key_array[i].key, strlen(key_array[i].key)); dict_pool_db_lock(db); ptr = dict_pool_db_get(db, key_array[i].key, strlen(key_array[i].key), &size); if (ptr != NULL) { printf("key: %s exist now, size: %d\n", key_array[i].key, (int) size); acl_myfree(ptr); } dict_pool_db_set(db, key_array[i].key, strlen(key_array[i].key), STR(value), LEN(value)); ptr = dict_pool_db_get(db, key_array[i].key, strlen(key_array[i].key), &size); if (ptr == NULL) { printf("key: %s not add into db\n", key_array[i].key); } else acl_myfree(ptr); dict_pool_db_unlock(db); if (i > 0 && i % __report_base == 0) { time(&now); printf("thread %u add one, i=%d, time=%ld, key=%s\r\n", (unsigned) acl_pthread_self(), i, now - last, key_array[i].key); last = now; } LOCK; __nwrite++; UNLOCK; } for (i = 0; i < __max; i++) { acl_myfree(key_array[i].key); } acl_myfree(key_array); acl_vstring_free(value); acl_myfree(id); printf("thread %u add over, i=%d, time=%ld\r\n", (unsigned) acl_pthread_self(), i, time(NULL) - begin); }
BOOL CALLBACK PasswordDialogProc(HWND hDlg, UINT message, UINT wParam, LONG lParam) { static HWND hOldPasswd, hNewPasswd1, hNewPasswd2; char oldpasswd[MAXPASSWORD + 1], newpasswd1[MAXPASSWORD + 1], newpasswd2[MAXPASSWORD + 1]; char buf1[ENCRYPT_LEN + 1], buf2[ENCRYPT_LEN + 1]; switch (message) { case WM_INITDIALOG: if (hPasswdDialog) { DestroyWindow(hDlg); return TRUE; } CenterWindow(hDlg, GetParent(hDlg)); hOldPasswd = GetDlgItem(hDlg, IDC_OLDPASSWD); hNewPasswd1 = GetDlgItem(hDlg, IDC_NEWPASSWD1); hNewPasswd2 = GetDlgItem(hDlg, IDC_NEWPASSWD2); Edit_LimitText(hOldPasswd, MAXPASSWORD); Edit_LimitText(hNewPasswd1, MAXPASSWORD); Edit_LimitText(hNewPasswd2, MAXPASSWORD); SetWindowFont(hOldPasswd, GetFont(FONT_INPUT), FALSE); SetWindowFont(hNewPasswd1, GetFont(FONT_INPUT), FALSE); SetWindowFont(hNewPasswd2, GetFont(FONT_INPUT), FALSE); hPasswdDialog = hDlg; return TRUE; case WM_COMMAND: switch(GET_WM_COMMAND_ID(wParam, lParam)) { case IDOK: /* User has pressed return on one of the edit boxes */ if (GetFocus() == hOldPasswd) { SetFocus(hNewPasswd1); return TRUE; } if (GetFocus() == hNewPasswd1) { SetFocus(hNewPasswd2); return TRUE; } if (GetFocus() == hNewPasswd2) PostMessage(hDlg, WM_COMMAND, IDC_OK, 0); return TRUE; case IDC_OK: /* Send results to server */ Edit_GetText(hOldPasswd, oldpasswd, MAXPASSWORD + 1); Edit_GetText(hNewPasswd1, newpasswd1, MAXPASSWORD + 1); Edit_GetText(hNewPasswd2, newpasswd2, MAXPASSWORD + 1); if (0 != strcmp(newpasswd1, newpasswd2)) { ClientError(hInst, hDlg, IDS_PASSWDMATCH); return TRUE; } if (strlen(newpasswd1) < MINPASSWORD) { ClientError(hInst, hDlg, IDS_PASSWDLENGTH, MINPASSWORD); return TRUE; } // Recall this was the last attempt to change a password. // It's just stopping the auto-nagging feature from popping // up a dialog box later. // // The config.password is checked elsewhere, such as by // modules that need confirmation for drastic features. // // To improve the security, we only update these if we *think* // they're right about the password. Not perfect, but we // never get word from the server that the password was right. // if (0 == strcmp(oldpasswd, config.password)) { config.lastPasswordChange = time(NULL); strcpy(config.password, newpasswd1); } // Encrypt old and new passwords for the server. // It's up to the server to check if we are allowed to change // the password, based on the correct old password. // MDString(oldpasswd, (unsigned char *) buf1); buf1[ENCRYPT_LEN] = 0; MDString(newpasswd1, (unsigned char *) buf2); buf2[ENCRYPT_LEN] = 0; RequestChangePassword(buf1, buf2); hPasswdDialog = NULL; EndDialog(hDlg, IDOK); return TRUE; case IDCANCEL: hPasswdDialog = NULL; EndDialog(hDlg, IDCANCEL); return TRUE; } break; } return FALSE; }
void main(int arg,char **args) { DIR* ret = NULL; int8_t cmd[200] = { 0 }; if(arg != 2) { printf("example: mkupImage [dir].. \n"); return ; } ret = opendir(args[1]); if(NULL == ret) { printf("Cannot open directory: %s\n",args[1]); return; } closedir(ret); if(0 >= DirDetectFile(args[1])) { printf("Cannot find file or find failed!!\n"); return ; } sprintf(cmd, "tar -cvf ./update.tar %s",args[1]); if(0 != system(cmd)) { printf("tar update.tar is failed!!!\n"); return ; } /* 计算哈希值 */ int8_t *pHash = "0"; int8_t buffer[8*1024] = {0}; FILE *tarfile; int8_t *pbuffer = buffer; tarfile = fopen("update.tar","r"); if(tarfile != NULL) { //hash写0 if(VERIFYLEN == fread(pbuffer,1, VERIFYLEN, tarfile)) { if(0 == fseek(tarfile,-(VERIFYLEN),SEEK_END)) { if(VERIFYLEN == fread(pbuffer+VERIFYLEN, 1, VERIFYLEN, tarfile)) { pHash = MDString(pbuffer,VERIFYLEN*2); } } } } else { printf("open update.tar is fail!!!\n"); return ; } FILE *file = fopen("hash","w+"); if(file == NULL) { printf("create hash is fail!!\n"); return ; } printf("hash [ %s ]\n",pHash); fprintf(file,"%s",pHash); fclose(file); /* 添加hash值文件 */ sprintf(cmd,"tar -rvf update.tar hash"); if(0 != system(cmd)) { printf("tar -rvf update.tar hash is failed!!\n"); system("rm -f update.tar hash"); return; } /* 压缩文件 */ sprintf(cmd,"gzip ./update.tar -f"); if(0 != system(cmd)) { printf("gzip update.tar is failed!!\n"); system("rm -f update.tar hash"); return; } system("rm -f hash"); printf("create upgrade file update.tar.gz is success!!\n"); }