2
  • 从文件中读取 16 个字节;
  • 加密这 16 个字节;
  • 将加密字节写入另一个文件;
  • 再次执行上述操作,直到文件结束;

如果最后一次调用小于 16 字节,我用 0 填充缓冲区。
这是正确的方法吗?

FILE *fp = fopen("name", "r+");
FILE *fpout = fopen("name", "w+");
char plain_text[16];
fseek(fp, 0, SEEK_SET);

while(!feof(fp)){
  memset(plain_text, 0, sizeof(plain_text);
  read_bytes = fread(plain_text, 1, 16, fp);
  if(read_bytes < 16){
    i = read__bytes;
    read_bytes += 1;
    for(i, i<16, i++) plain_text[read_bytes] = 0;
  }
  encrypt-this-part-of-file
  fwrite(encBuffer, 1, 16, fpout);
}
4

1 回答 1

4

不,这将是正确的...

if(read_bytes < 16)
{
    for(i = read_bytes; i<16; i++)
    {
        plain_text[i] = 0;
    }
}

...如果你真的需要它。

但是您不需要将数组的剩余部分归零,因为您已经使用...清除了它。

memset(plain_text, 0, sizeof(plain_text));

...您在每次调用 fread 之前都会调用它。

于 2013-01-05T14:47:33.990 回答