//============================================================================== void ShiftRows(uint8_t *s, uint8_t direct) //Функция сдивига строк { uint8_t temp[8]; //Временные данные uint8_t i , j; //Счетчики uint8_t shfts[3][4]; //Матрица позиций сдвига for(i=0;i<3;i++) { for(j=0;j<4;j++) { if(i==2 && j==3) shfts[i][j] = 4; else shfts[i][j] = j; } } for(i=0;i<4;i++) { for(j=0;j<Nb;j++) temp[j] = s[j*4+i]; shiftrow(temp , shfts[Nb/2-2][i] , direct); for(j=0;j<Nb;j++) s[j*4+i] = temp[j]; } }
void MessageEncryption::encrypt(std::string imgpath,std::string outpath){ std::default_random_engine rand (this->key); int currand; int i, j; int width, height; FILE* in, *out; gdImagePtr img; printf("o\n"); int ext = getexten(imgpath); printf("a\n"); in = fopen(imgpath.c_str(),"rb"); if(ext==0){ img=gdImageCreateFromJpeg(in); } else if(ext==1){ img=gdImageCreateFromPng(in); } else{ exit(1); } fclose(in); printf("b\n"); width = gdImageSX(img); height = gdImageSY(img); for(i=0;i<ITER_COUNT;i++){ currand = rand()%FLIP_CHANCE; if(currand==0){ // flip horizontally fliphoriz(img); } else if(currand==1){ // flip vertically flipvert(img); } else if(currand<=1+FLIP_CHANCE/2){ // shift some rows for(j=0;j<=(currand%(width/3));j++){ shiftcol(img,(3*i+j)%width,(7*currand+4*i)%height); } } else{ // shift some columns for(j=0;j<=(currand%(height/3));j++){ shiftrow(img,(3*i+j)%height,(7*currand+4*i)%width); } } } printf("c\n"); ext = getexten(outpath); out = fopen(outpath.c_str(),"wb"); if(ext==0){ gdImageJpeg(img,out,-1); } else if(ext==1){ gdImagePng(img,out); } else{ exit(1); } fclose(out); gdImageDestroy(img); }
int main(){ int rounds, i, j, count, numberround, answer, rconround = 0, subbyteround = 0;; char plaintext[17] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'}; char key[17] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'}; char index[16][3]; char indexkey[16][3]; char b[3], a[3]; printf("Input Text: "); gets(plaintext); printf("Input Key: "); scanf(" %[^\n]s\n", key); rounds = ceil(strlen(plaintext)/16); for(i=0; i<16; i++){ sprintf(a, "%x", plaintext[i]); /* keep char ascii to hex base */ sprintf(b, "%x", key[i]); strcpy(index[i], a); strcpy(indexkey[i], b); //printf("%x\n", index[i]); //printf("%s\n", indexkey[i]); } for(i=0; i<16; i++){//we do add round key first before do 10 loop //printf("%d\n", (((tonum(index[i][0]))*10)+(tonum(index[i][1])))); answer = (((tonum(index[i][0]))*10)+(tonum(index[i][1])))^(((tonum(indexkey[i][0]))*10)+(tonum(indexkey[i][1]))); printf("%d\n", answer); sprintf(a, "%x", answer); printf("%s\n", a); strcpy(index[i], a); //printf("%s\n", index[i]); } for(numberround=1; numberround<=10; numberround++){ printf("%d %d\n", rconround,subbyteround); if(numberround==1){ sub_byte_key(indexkey); roundkey(matrixkey, rconround); } else{ roundkey(matrixkey, rconround); } sub_byte(index, subbyteround); printf("roundkey:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrixkey[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); printf("Subbyte:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); shiftrow(); printf("shiftrow value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); if(numberround<10){ mixcolumn(); printf("mixcolumn value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } } printf("-------------------------------------------\n"); addroundkey(); printf("Addroundkey value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%c", matrix[j][i]); } //printf("\n"); } printf("\n"); subbyteround++; rconround++; } }
int main(){ int rounds, i, j, count, numberround; char plaintext[17] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'}; char key[17] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'}; char index[16][3]; char indexkey[16][3]; char b[3], a[3]; printf("Input Text: "); gets(plaintext); printf("Input Key: "); scanf(" %[^\n]s\n", key); rounds = ceil(strlen(plaintext)/16); for(i=0; i<16; i++){ sprintf(a, "%x", plaintext[i]); /* keep char ascii to hex base */ sprintf(b, "%x", key[i]); strcpy(index[i], a); strcpy(indexkey[i], b); } for(numberround=1; numberround<=10; numberround++){ if(numberround==1){ sub_byte_key(indexkey); roundkey(matrixkey); } else{ roundkey(matrixkey); } sub_byte(index); printf("roundkey:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrixkey[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); printf("Subbyte:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); shiftrow(); printf("shiftrow value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); if(numberround<10){ mixcolumn(); printf("mixcolumn value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } } printf("-------------------------------------------\n"); addroundkey(); printf("Addroundkey value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%c", cipher[i][j]); } } printf("\n"); } /* for(i=0; i<16; i++){ sprintf(a, "%x", plaintext[i]); //keep char ascii to hex base sprintf(b, "%x", key[i]); strcpy(index[i], a); strcpy(indexkey[i], b); } roundkey(indexkey); sub_byte(index); printf("matrixkey:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrixkey[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); printf("matrix:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); shiftrow(); printf("shiftrow value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); mixcolumn(); printf("mixcolumn value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); addroundkey(); printf("Addroundkey value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } */ }