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 文件。我还没有弄清楚如何创建一个静态 cl32.lib 文件,我可以将其包含在不需要 DLL 的项目中。那会起作用,或者其他非 cryptlib 解决方案。

我也看过 Crypto++,但不幸的是,可下载的 chm 用户指南已损坏,而且该手册太详细了,我无法在没有某种指南的情况下遵循。

我应该指出,虽然我对整个 C 相当熟悉,但我的大部分经验都是旧的并且在 Linux 中,而不是使用我现在正在做的 Visual Studio 2010。

谢谢,本

4

1 回答 1

1

如果您只想删除依赖项,则可以通过静态编译程序来包含外部依赖项。

如果您担心 windows 系统上缺少 DLL,您可以使用 windows 加密 API,它存在于所有 windows 系统上。

密码学参考

示例 C 程序:使用 CryptAcquireContext

如果您不想要这些,您仍然可以实现自己的加密库。但我不建议这样做,因为它充满了潜在的陷阱,即使你是加密专家。

于 2012-09-22T15:26:47.590 回答