1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| void encfile(char *text, char *textout, aes_encrypt_ctx ctx[1])
{ unsigned char dbuf[3 * BLOCK_LEN],b;
unsigned long i, len, wlen = BLOCK_LEN;
char textByte[32];
fillrand(dbuf, BLOCK_LEN);
printf("dbuf1=%s\n",dbuf);
// read the first file block
len =16; //(unsigned long) fread((char*)dbuf + BLOCK_LEN, 1, BLOCK_LEN, fin);
//printf("len=%d and text= %s\n",len,text);
ConvertHexaToByte(text,textByte);
//printf("len=%d and textByte= %s\n",len,textByte);
//((char*)dbuf + BLOCK_LEN)=text;
printf("encfile debut\n");
strncpy((char*)dbuf + BLOCK_LEN,textByte,16);
printf("dbuf2=%s\n",dbuf);
unsigned char *b1 = dbuf, *b2 = b1 + BLOCK_LEN, *b3 = b2 + BLOCK_LEN, *bt;
printf("len >=16 len= %d\n",len);
// write the IV
//if(fwrite((char*)dbuf, 1, BLOCK_LEN, fout) != BLOCK_LEN)
// return WRITE_ERROR;
strncpy(textout,dbuf,BLOCK_LEN);
printf("dbuf3=%s\n",dbuf);
for( ; ; )
{
// read the next block to see if ciphertext stealing is needed
//len = (unsigned long)fread((char*)b3, 1, BLOCK_LEN, fin);
// do CBC chaining prior to encryption for current block (in b2)
for(i = 0; i < BLOCK_LEN; ++i)
b1[i] ^= b2[i];
// encrypt the block (now in b1)
aes_encrypt(b1, b1, ctx);
if(len != 0 && len != BLOCK_LEN) // use ciphertext stealing
{
// set the length of the last block
wlen = len;
// xor ciphertext into last block
for(i = 0; i < len; ++i)
b3[i] ^= b1[i];
// move 'stolen' ciphertext into last block
for(i = len; i < BLOCK_LEN; ++i)
b3[i] = b1[i];
// encrypt this block
aes_encrypt(b3, b3, ctx);
// and write it as the second to last encrypted block
//if(fwrite((char*)b3, 1, BLOCK_LEN, fout) != BLOCK_LEN)
// return WRITE_ERROR;
//strncpy(textout,(char*)b3,BLOCK_LEN);
}
// write the encrypted block
//if(fwrite((char*)b1, 1, wlen, fout) != wlen)
// return WRITE_ERROR;
strncpy(textout,(char*)b1,wlen);
printf("textout= %c\n",&textout);
if(len != BLOCK_LEN)
return;
// advance the buffer pointers
bt = b3, b3 = b2, b2 = b1, b1 = bt;
}
} |
Partager