C++ 如何使用加密++;使用WinFormGUI?
我正在使用XTR和DH算法Crypto++创建项目,但它只是在命令行中运行 我曾尝试在VS2015中使用winform gui,但在将运行时库更改为MDd并激活CLR时总是出错。我用CLR项目创建了一个新项目,它仍然是错误的 我的问题是:C++ 如何使用加密++;使用WinFormGUI?,c++,cryptography,crypto++,C++,Cryptography,Crypto++,我正在使用XTR和DH算法Crypto++创建项目,但它只是在命令行中运行 我曾尝试在VS2015中使用winform gui,但在将运行时库更改为MDd并激活CLR时总是出错。我用CLR项目创建了一个新项目,它仍然是错误的 我的问题是: Crypto++是静态库,我可以使用它为项目制作GUI吗 如何使Crypto++可以用作动态库 。。。将运行时库更改为/MDd Crypto++wiki上有将生成设置从静态运行时链接更改为动态运行时链接的说明 简而言之,将调试和发布版本的multi-threa
/MDd
Crypto++wiki上有将生成设置从静态运行时链接更改为动态运行时链接的说明
简而言之,将调试和发布版本的multi-threaded
更改为multi-threadeddl
cryptlib.vcxproj
multi-threaded
更改为multi-threadeddl
multi-threadeddebug
更改为multi-threadeddebugdll
cryptest.vcxproj
multi-threaded
更改为multi-threadeddl
multi-threadeddebug
更改为multi-threadeddebugdll
并激活CLR 我似乎记得我过去在CLR和托管代码方面遇到过问题。但你现在可能运气更好 此外,我还有一个允许您使用Nmake文件构建库的。它已设置为动态链接。您可以从开发人员提示符运行它。我使用它从命令行测试x86、x64、ARM和 您可能还对命令行中的MSBuild感兴趣。您还需要在开发人员提示符下使用MSBuild。有关MSBuild,请参阅
。。。在WinForm GUI项目中使用[作为DLL] 像WinForms、Qt或MFC这样的项目中没有可使用的通用DLL。Crypto++动态链接库是一个。这是一个可怕的创造,它引起了很多混乱。它造成了很多混乱,因为它只有FIPS批准的算法,如AES和SHA。它没有其他东西,比如编码器、解码器、过滤器等等 您可以使用Crypto++作为DLL,只需要为静态库提供包装器。建议使用API对静态库进行包装,将库用作DLL。如何创建包装器DLL在Crypto++wiki的中有详细介绍 下面是从维基文章中摘取的一些示例代码。它计算并验证SHA-256散列。但是请访问wiki文章,因为它提供了更多的细节,并提供了在Linux、Windows、OS X和Solaris上应该使用的选项和开关
#include "cryptlib.h"
#include "sha.h"
#include <stdint.h>
#if defined _WIN32 || defined __CYGWIN__
#ifdef BUILDING_DLL
#ifdef __GNUC__
#define DLL_PUBLIC __attribute__ ((dllexport))
#else
#define DLL_PUBLIC __declspec(dllexport)
#endif
#else
#ifdef __GNUC__
#define DLL_PUBLIC __attribute__ ((dllimport))
#else
#define DLL_PUBLIC __declspec(dllimport)
#endif
#endif
#define DLL_LOCAL
#else
#if __GNUC__ >= 4
#define DLL_PUBLIC __attribute__ ((visibility ("default")))
#define DLL_LOCAL __attribute__ ((visibility ("hidden")))
#else
#define DLL_PUBLIC
#define DLL_LOCAL
#endif
#endif
extern "C" DLL_PUBLIC
int sha256_hash_message(uint8_t* digest, size_t dsize,
const uint8_t* message, size_t msize)
{
using CryptoPP::Exception;
using CryptoPP::SHA256;
try
{
SHA256().CalculateTruncatedDigest(digest, dsize, message, msize);
return 0; // success
}
catch(const Exception&)
{
return 1; // failure
}
}
extern "C" DLL_PUBLIC
int sha256_verify_digest(const uint8_t* digest, size_t dsize,
const uint8_t* message, size_t msize)
{
using CryptoPP::Exception;
using CryptoPP::SHA256;
try
{
bool verified = SHA256().VerifyTruncatedDigest(digest, dsize, message, msize);
return verified ? 0 : 1;
}
catch(const Exception&)
{
return 1; // failure
}
}
#包括“cryptlib.h”
#包括“sha.h”
#包括
#如果已定义WIN32 | |已定义ucygwin__
#ifdef构建动态链接库
#ifdef__GNUC__
#定义DLL_公共___属性__((dllexport))
#否则
#定义DLL\u PUBLIC\u declspec(dllexport)
#恩迪夫
#否则
#ifdef__GNUC__
#定义DLL_公共___属性__((dllimport))
#否则
#定义DLL_PUBLIC__declspec(dllimport)
#恩迪夫
#恩迪夫
#定义DLL_本地
#否则
#如果=4
#定义DLL\u公共属性(可见性(“默认”))
#定义DLL\u本地属性(可见性(“隐藏”))
#否则
#定义DLL_公共
#定义DLL_本地
#恩迪夫
#恩迪夫
外部“C”DLL_公共
int sha256哈希消息(uint8*摘要,大小大小,
const uint8_t*消息,大小(msize)
{
使用CryptoPP::Exception;
使用CryptoPP::SHA256;
尝试
{
SHA256().CalculateRuncatedGist(摘要、dsize、消息、msize);
返回0;//成功
}
捕获(常量异常&)
{
返回1;//失败
}
}
外部“C”DLL_公共
int sha256验证摘要(常量8摘要、大小大小、,
const uint8_t*消息,大小(msize)
{
使用CryptoPP::Exception;
使用CryptoPP::SHA256;
尝试
{
bool verified=SHA256().VerifyTruncatedDigest(摘要、dsize、消息、msize);
返回已验证?0:1;
}
捕获(常量异常&)
{
返回1;//失败
}
}
错误是什么?您可以尝试一下。从理论上讲,你可以用“艾哈迈德-我”来阻止落选。问题有些宽泛,如果Q保持开放,你可能会积累更多的DV。您仍然需要构建项目的GUI部分并调用包装器DLL。也许这应该是你的下一个问题。如果需要,请确保清楚地说明包装器DLL中的函数。