在没有外部DLL的情况下用C中的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。

谢谢,Ben

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

如果你担心windows系统上缺少DLL,你可以使用windows crypto API,它在所有windows系统上都存在。

加密参考

示例C程序:使用CryptAcquireContext

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

最新更新