0

これが私のコードです:

/* DECRYPTION */
int i;
aes_decrypt_ctx ctx[1];
//aes_encrypt_ctx ctx[1];
unsigned char iv[16];
unsigned char inBuffer[200], outBuffer[200];
FILE *inFile1=fopen("C:/sth.txt.aes", "rb"); /* used to read IV ONLY */
FILE *inFile2=fopen("C:/sth.txt.aes", "rb"); /* used to read the whole file, included IV */
FILE *outFile=fopen("C:/sth.txt", "wb");
if (inFile1 != NULL) {
  lbl_status->Text+="\r\nFinding IV(first 16 byte) of the file...";
  /* read initialization vector from file */
  if(fread(iv, 1, 16, inFile1) >= 16) {
    lbl_status->Text+="\r\nFound IV(first 16 byte) in the file...";
    fclose(inFile1);
    aes_decrypt_key192((unsigned char*)MStringToCCS(decryptsecret), ctx);

    // Start decrypting
    lbl_status->Text+="\r\nStart decrypting...";
    while((i=fread(inBuffer, 1, sizeof(inBuffer), inFile2)) > 0) {
      aes_ecb_decrypt(inBuffer, outBuffer, i, ctx);
      fwrite(outBuffer, 1, i, outFile);
    }
    fclose(inFile2);
    fclose(outFile);
  }else{
    /* error: file doesn't even contain an initialisation vector */
    lbl_status->Text+="\r\nError: IV(first 16 byte) not found.";
    MessageBox::Show("Could not find the IV.", "Error", MessageBoxButtons::OK, MessageBoxIcon::Error);
    fclose(inFile1);
    fclose(inFile2);
    fclose(outFile);
  }
 }else{
  lbl_status->Text+="\r\nError: Could not open the file.";
  MessageBox::Show("Error for opening the file.", "Error", MessageBoxButtons::OK, MessageBoxIcon::Error);
  fclose(inFile1);
  fclose(inFile2);
  fclose(outFile);
 }

まず、openssl を使用して AES 暗号化ファイルを作成しました。 openssl enc -e -aes-192-ecb -in C:/sth.txt -out C:/sth.txt.aes プログラムを試してみましたが、出力は元のファイルと同じではありませんでした。

解決策はありますか?

4

1 に答える 1

0

C ++での暗号化には、Crypto++Botanなどのポータブルライブラリを使用することをお勧めします。これらのライブラリは高く評価されており、サポートのための優れたコミュニティがあります。

于 2012-08-10T21:29:09.437 に答える