在没有外部DLL的情况下用C中的PGP公钥加密字符串?

时间:2012-09-22 15:12:29

标签: c visual-studio-2010 encryption pgp

我为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。

谢谢, 本

1 个答案:

答案 0 :(得分:1)

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

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

Cryptography Reference

Example C Program: Using CryptAcquireContext

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