代码之家  ›  专栏  ›  技术社区  ›  Fmstrat

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

  •  0
  • Fmstrat  · 技术社区  · 13 年前

    我在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 回复  |  直到 13 年前
        1
  •  1
  •   Peter F.    13 年前

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

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

    Cryptography Reference

    Example C Program: Using CryptAcquireContext

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

    推荐文章