2017-02-12 4 views
-1


私はこのプロジェクトで1週間作業しています。私は問題を解決できません。 バイナリファイル(.exe、.jpgなど)を暗号化/復号化できる暗号化装置を作っています。
私はベクトルを使ってバイナリファイルからデータを正しく取得することができます。
私は正しくベクトルからのデータを暗号化/復号化できません。
いくつかのコード:問題を暗号化するchar *

if (encryptFile) 
     { 
      Crypt crypt; 
      //TOencryptfile.open(writeFile, ios::binary | ios::out); 

      vector<char> buffer((istreambuf_iterator<char>(encryptFile)),(istreambuf_iterator<char>())); 
      cout << buffer.size() << endl; 
      _getch(); 
      for (std::vector<char>::iterator i = buffer.begin(); i != buffer.end(); ++i) { 
       // encryption that fails 
       temp = crypt.getKeyFromString(&*i , key, strlen(&*i)); 
      } 
      TOencryptfile.close(); 
      encryptFile.close(); 
     } 

と関数getKeyFromString:

KEYCRYPT Crypt::getKeyFromString(KEYCRYPT text, KEYCHAR charkey, keylength length) { 
    int string_size = std::strlen(text); 
    KEYCRYPT textcrypt = new char[string_size + 1]; 
    std::strcpy(textcrypt, text); 
    int key = strlen(charkey); 
    for (int i = 0; i < length; i++) { 
     if (strlen(text) != 0) { 
      textcrypt[i] = text[i]^charkey[i % (sizeof(charkey)/sizeof(char))]; 
      //keylvl += text[i]^(int(charkey) + i) % key; 
      //keyfnl += keylvl[i]^(int(charkey) - i) * key; 
     } 
    } 
    return textcrypt; 
} 

と最後のタイプ:

typedef char* KEYCRYPT; 
typedef int KEY; 
typedef char* KEYCHAR; 
typedef int keylength; 

誰でも*iを暗号化するための良い方法を知っていますか?
私の方法がうまくいかないので、うまくgetKeyFromString(temp, key, strlen(temp))

+0

「i」が指しているものは1文字であるように見えます。暗号APIは文字列ではなく、文字列を暗号化します。感謝! –

+0

ありがとう!解決策として何をお勧めしますか? – waterlight

+0

@waterlightファイルの内容を文字列に入れて、暗号APIに渡します。 – Barmar

答えて

0

で再び関数を呼び出すとき、それは@Barmarの応答に応じて、同じことを返さない:
@waterlight Put the file contents into a string and pass that to the crypto API.
私は問題を解決するために管理。

stringstream result; 
std::copy(buffer.begin(), buffer.end(), std::ostream_iterator<char>(result, " ")); 
string now = result.str(); 

、すべてが働いた:
私がしなければならなかったすべてでした。
お返事いただいた皆さんありがとうございます。

関連する問題