2017-02-22 5 views
0

私は変更できない基本的な仕組みである暗号化ライブラリを使用して、いくつかのソフトウェアを開発しています。プログラムが実行されると、公開鍵と秘密鍵を生成するのに約10分かかるので、ソフトウェアの他の部分をデバッグしようとすると非常に不満です。私はファイルにキーを書いて、時間を節約するためにそれらを読みたいと思います。 Enc_Key_Ttypedef void* Enc_Key_Tvoidポインターのデータをファイルに書き込む

私が読んで、次のようにあるキーを書き込もうとするために使用したコードのように定義されて

Enc_Key_T secKey = nullptr;

は(のみ書き込もう:

彼らのキーが無効ポインタでありますこれまでの秘密鍵):

ファイルを書き込むと、64秘密鍵のポインタでそれを読み取ると、値の小さいメモリアドレスに設定され、私は何か間違っていると思うようになります。どのようにこれを行うことができるかの例は見つけられません。私は下敷きの構造を作成しないので、それができるかどうかも分からないので、ポインタで指定された場所にあるメモリを割り当てようとしています。

これはキーを生成する基礎となるライブラリに触れなくても実行できますか?

+0

少なくとも 'sizeof(&sec_key)'これは間違っています。これは 'sizeof(sec_key)'でなければなりません。 –

+0

キーの保存方法を理解する必要があります。今は、どこにいるかだけを知っているものをコピーしようとしているのと同じことをやっています。しかし、紙をコピーする方法は、サウンドをコピーする方法とは異なります。どこでコピーするのかを正確に知る必要があります。 –

+0

「Enc_Key_T」の種類は、それがクラスか構造体か、それとも何ですか?あなたはそれを持っている場合、宣言を投稿することはできますか? sizeofは、Enc_Key_Tの宣言を表示しない限り、あなたには何の助けにもなりません。 –

答えて

2

短い答え:一般的に、正しく行うことはできません。

長い答え: あなたが欠けているのは、構造です。メモリの内容を書き込むだけでEnc_Key_Tをシリアル化できるという保証はありません。さらに、たとえ生のランダムデータであっても、既知の長さはありません。

また、ライブラリに生成されたキーにバインドされた独自の状態がないという保証はありません。

コードの問題:

書き込み時には、データの長さは不明です。書き込まれるデータはポインタであり、次に偽のものです。

読み取り時には、セカンダリバッファは必要ありません。 freadは、データへのポインタではなく、読み込んだバイト数を返します。だから、代わりに:

buffer = (char *) malloc (sizeof(char)*lSize); 
if(buffer == NULL) 
    memError(); 

sec_key = (void *) fread(buffer, 1, lSize, pFile); 

次のように記述することができます:

sec_key = (void *) malloc (lSize); 
if(sec_key == NULL) 
    memError(); 

if (0 == fread(sec_key, 1, lSize, pFile)) { 
    // error 
} 
+0

また、彼は書き込むバイト数も分かりません。あなたが指摘しているように、何か書いたことが何らかの意味を持っているという保証はありません。プログラムを再び実行するときには存在しないもののアドレスかもしれません。 –

+0

@DavidSwwartzああ。筆記部分も間違っていました。知られている長さはまったくありません。 – Lyth

0

私はあなたが私が示唆していたものラッパーを構築し、1時間を投資することができるように、集中的にこのアプリケーションをデバッグしようとしていると仮定します。あなたは根本的な構造を知っていないと、このライブラリを使用すると、次の操作を実行する必要がブラックボックスであるとして、あなたは長いよう

void generate_KeysEx(...){ 
#if DEBUG 
    // return dummy keys 
#else 
    // call this API 
#endif 
} 

void EncryptEx(...){ 
#if DEBUG 
    // return cipher same as plain text 
#else 
    // call this library API 
#endif 
} 
0

コメントでの議論から、これが可能であるようにそれが聞こえませんライブラリー内の構造をキャプチャーすることなく、コードを大幅に変更する必要があります。

私が発見した非常にハックリな解決策は、実行時間を大幅に短縮するいくつかの主要な生成パラメータを変更することでした。

関連する問題