0

C++ と C# の例はたくさんありますが、C では運がありません。外部 DLL を参照せずに文字列を単純に暗号化しようとしています。私はcryptlib(PGPに移る前の基本的な暗号化)と次の.cファイルを試し始めました:

#include "include/cryptlib/cryptlib.h"

void PGPEncrypt(char* input, char* output) {
    CRYPT_ENVELOPE cryptEnvelope;
    int bytesCopied;

    cryptCreateEnvelope(&cryptEnvelope, CRYPT_UNUSED, CRYPT_FORMAT_CRYPTLIB);

    // Below line makes things more efficient if you know the data size
    cryptSetAttribute(cryptEnvelope, CRYPT_ENVINFO_DATASIZE, strlen(input));

    // Push unencrypted, pop encrypted. 4000 is the size of output
    cryptPushData(cryptEnvelope, input, strlen(input), &bytesCopied);
    cryptFlushData(cryptEnvelope);
    cryptPopData(cryptEnvelope, output, 4000, &bytesCopied);

    cryptDestroyEnvelope(cryptEnvelope);
}

ただし、これをコンパイルしているときに、アプリケーションを実行したときに、cl32.lib が単なるヘッダー ライブラリであり、cl32.dll ファイルをシステムにインストールする必要があることに気付きました。DLL を必要としないプロジェクトに含めることができる静的な cl32.lib ファイルを作成する方法をまだ理解していません。それはうまくいくでしょう、または別の非cryptlibソリューション。

Crypto++ も調べましたが、残念ながら、ダウンロード可能な chm ユーザー ガイドが破損しており、マニュアルが詳細すぎて、何らかのガイドがないと理解できません。

私はC全体にかなり精通していますが、私の経験のほとんどはLinuxで古く、現在行っているVisual Studio 2010を使用していません。

ありがとう、ベン

4

1 に答える 1

1

依存関係を削除したいだけの場合は、プログラムを静的にコンパイルすることにより、外部依存関係を含めることができます。

Windows システムで DLL が見つからないことが心配な場合は、すべての Windows システムに存在する Windows 暗号化 API を使用できます。

暗号化リファレンス

サンプル C プログラム: CryptAcquireContext の使用

これが不要な場合でも、独自の暗号ライブラリを実装できます。しかし、暗号の専門家であっても、潜在的な落とし穴がたくさんあるので、お勧めしません。

于 2012-09-22T15:26:47.590 に答える