Windows+VS2019环境各密码算法库(openssl\GMP\ZLib)的环境配置及用法总结

本文详细介绍了在Windows+VS2019环境下,如何配置和使用GMP、ZLIB、OPENSSL、GMSSL库,包括环境变量设置、宏定义、库文件引用,以及针对GMP和ZLIB的特殊注意事项。同时,文章还涵盖了USBKEY(CSP接口)的使用,包括其CSP API、中间件安装和示例程序。
摘要由CSDN通过智能技术生成

GMP

要点:首先VS中只能使用.lib文件作静态库,网上用.a的纯属**

安装教程+编译完成的文件

文件:上述文件还是会有点问题,在此我自己编译了一套,用起来还不错。度娘网盘 提取码lefi

环境

首先将gmp.h及libgmp-10.lib放到同一文件夹下,记为GMPLib

  1. 工程右键→属性→c/c++→常规→附加包含目录:GMPLib(gmp.h所在目录)
  2. 工程右键→属性→链接器→常规→附加库目录:GMPLib(libgmp-10.lib所在目录)
  3. 工程右键→属性→链接器→输入→附加依赖项:libgmp-10.lib
  4. 若你的电脑中没有GMP的dll库,还需将其中的libgmp-10.dll文件放在你的可执行exe文件的同一目录下。

注:gmpxx库同理,只不过换成了libgmpxx-4.lib\dll文件。

使用

#include <stdio.h>
#include <gmp.h>
const int MAXN = 1e5 + 5;
typedef mpz_t bint;

char sa[2020], sb[2020];

int main()
{
   
	mpz_t a,b,t;	//mpz_t 为GMP内置大数类型
	scanf("%s", sa);
	scanf("%s", sb);
	mpz_init_set_str(a, sa, 10); //大数a初始化为字符串sa代表的数字
	mpz_init_set_str(b, sb, 10);
	mpz_init(t);    //大数t使用前要进行初始化,以便动态分配空间
	//mpz_ui_pow_ui(t, 2, 100);	//GMP所有函数基本都是以mpz打头
	int i;
	for(i=1;i<=100;i++)
		mpz_mul(t, a, b);
	gmp_printf("a * b = %Zd\n", t);   //输出大数,大数的格式化标志为%Zd
	mpz_clears(a,b,t,NULL); //清除,最后以NULL结尾
	return 0;
}

ZLIB

要点:此处使用单一静态库,环境配置中与上述有所不同,需要添加3个宏定义

安装教程

环境

  1. 包含头文件

    属性–C/C+±-常规–附加包含目录(添加包含.h文件的目录)

  2. 定义宏

    属性–C/C+±-预处理器–预处理器定义:添加3个宏: ZLIB_WINAPI;ASMV;ASMINF

  3. 项目包含.lib文件所在的目录:

    属性–链接器–常规–附加库目录

  4. 项目包含.lib文件

    属性–链接器–输入–附加依赖项(libstat.lib)

使用

#include "zconf.h"
#include "zlib.h"
#include <string.h>
#include <Windows.h>
// The one and only application object

using namespace std;

#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
#  include <fcntl.h>
#  include <io.h>
#  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
#else
#  define SET_BINARY_MODE(file)
#endif

#define CHUNK 16384
int def(FILE* source, FILE* dest, int level)
{
   
    int ret, flush;
    unsigned have;
    z_stream strm;
    unsigned char in[CHUNK];
    unsigned char out[CHUNK];
    /*allocate defalte state*/
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;
    ret = deflateInit(&strm, level);
    if (ret != Z_OK)
        return ret;

    do
    {
   
        strm.avail_in = fread(in, 1, CHUNK, source);
        if (ferror(source))
        {
   
            (void)deflateEnd(&strm);
            return Z_ERRNO;
        }
        flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
        strm.next_in = in;
        do
        {
   
            strm.avail_out = CHUNK;
            strm.next_out = out
  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值