您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ EVP_MD_CTX_destroy函数代码示例

51自学网 2021-06-01 20:35:09
  C++
这篇教程C++ EVP_MD_CTX_destroy函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中EVP_MD_CTX_destroy函数的典型用法代码示例。如果您正苦于以下问题:C++ EVP_MD_CTX_destroy函数的具体用法?C++ EVP_MD_CTX_destroy怎么用?C++ EVP_MD_CTX_destroy使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了EVP_MD_CTX_destroy函数的27个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: opensslecdsa_createctx

static isc_result_topensslecdsa_createctx(dst_key_t *key, dst_context_t *dctx) {	EVP_MD_CTX *evp_md_ctx;	const EVP_MD *type = NULL;	UNUSED(key);	REQUIRE(dctx->key->key_alg == DST_ALG_ECDSA256 ||		dctx->key->key_alg == DST_ALG_ECDSA384);	evp_md_ctx = EVP_MD_CTX_create();	if (evp_md_ctx == NULL)		return (ISC_R_NOMEMORY);	if (dctx->key->key_alg == DST_ALG_ECDSA256)		type = EVP_sha256();	else		type = EVP_sha384();	if (!EVP_DigestInit_ex(evp_md_ctx, type, NULL)) {		EVP_MD_CTX_destroy(evp_md_ctx);		return (dst__openssl_toresult3(dctx->category,					       "EVP_DigestInit_ex",					       ISC_R_FAILURE));	}	dctx->ctxdata.evp_md_ctx = evp_md_ctx;	return (ISC_R_SUCCESS);}
开发者ID:Stichting-MINIX-Research-Foundation,项目名称:minix,代码行数:28,


示例2: sha_init

nyx_error_t sha_init(const char *name){	const struct sha_algo_data_t *algo = sha_algo_data_lookup(name);	if (algo == NULL)	{		return NYX_ERROR_INVALID_VALUE;	}	if (running_mdctx != NULL)	{		EVP_MD_CTX_cleanup(running_mdctx);		EVP_MD_CTX_destroy(running_mdctx);	}	running_mdctx = EVP_MD_CTX_create();	EVP_MD_CTX_init(running_mdctx);	if (EVP_DigestInit_ex(running_mdctx, algo->md(), NULL) != 1)	{		return NYX_ERROR_GENERIC;	}	return NYX_ERROR_NONE;}
开发者ID:ctbrowser,项目名称:nyx-modules,代码行数:25,


示例3: verifySignature

static bool verifySignature(const char *data, int dataLength, const char *signature, int signatureLength, const char *cert) {    X509* x509;    BIO* bio = BIO_new(BIO_s_mem());    BIO_puts(bio, cert);    x509 = PEM_read_bio_X509(bio, NULL, NULL, NULL);        BIO_free(bio);        if (!x509) {        return false;    }        EVP_PKEY* pubKey = X509_get_pubkey(x509);    EVP_MD_CTX *mdctx = NULL;    mdctx = EVP_MD_CTX_create();    EVP_DigestVerifyInit(mdctx, NULL, EVP_sha256(), NULL, pubKey);    EVP_DigestVerifyUpdate(mdctx, data, dataLength);    int result = EVP_DigestVerifyFinal(mdctx, signature, signatureLength);        X509_free(x509);    EVP_PKEY_free(pubKey);    EVP_MD_CTX_destroy(mdctx);        return result > 0;}
开发者ID:7hunderbug,项目名称:moonlight-embedded,代码行数:25,


示例4: digestOfBytes

static int digestOfBytes(uint8_t *message, char **output, char *type, int inLength) {    EVP_MD_CTX *mdctx;    const EVP_MD *md;    unsigned char md_value[EVP_MAX_MD_SIZE];    unsigned int md_len, i;    OpenSSL_add_all_digests();    md = EVP_get_digestbyname(type);    mdctx = EVP_MD_CTX_create();    EVP_DigestInit_ex(mdctx, md, NULL);    EVP_DigestUpdate(mdctx, message, inLength);    EVP_DigestFinal_ex(mdctx, md_value, &md_len);    EVP_MD_CTX_destroy(mdctx);    char *digest = calloc((md_len*2) + 1, sizeof(char));        for(i = 0; i < md_len; i++) {      sprintf(&digest[2*i], "%02x", md_value[i]);    }        digest[md_len * 2] = '/0';    memcpy(*output, digest, strlen(digest));        free(digest);    /* Call this once before exit. */    //EVP_cleanup();        return NOERROR;}
开发者ID:kleetus,项目名称:bitpay-c-keyutils,代码行数:30,


示例5: ssl2_PRF

int ssl2_PRF( const u_char* secret, uint32_t secret_len,		const u_char* challenge, uint32_t challenge_len, 		const u_char* conn_id, uint32_t conn_id_len,		u_char* out, uint32_t out_len ){	u_char c= '0';	int repeat = 0;	int i = 0;	const EVP_MD *md5 = NULL;	EVP_MD_CTX *ctx;	md5 = EVP_md5();	if( !out ) return NM_ERROR( DSSL_E_INVALID_PARAMETER );	if( out_len % EVP_MD_size(md5) != 0 ) { return NM_ERROR( DSSL_E_INVALID_PARAMETER ); }	repeat = out_len / EVP_MD_size(md5);	ctx = EVP_MD_CTX_create();	EVP_MD_CTX_init( ctx );	for( i = 0; i < repeat; i++ )	{		EVP_DigestInit_ex( ctx, md5, NULL );		EVP_DigestUpdate( ctx, secret, secret_len );		EVP_DigestUpdate( ctx, &c, 1);		c++; /* '0', '1', etc. */		EVP_DigestUpdate( ctx, challenge, challenge_len );		EVP_DigestUpdate( ctx, conn_id, conn_id_len );		EVP_DigestFinal_ex( ctx, out, NULL );		out += EVP_MD_size( md5 );	}	EVP_MD_CTX_destroy( ctx );	return DSSL_RC_OK;}
开发者ID:voipmonitor,项目名称:sniffer,代码行数:34,


示例6: BIO_new_mem_buf

boolNvPairingManager::verifySignature(QByteArray data, QByteArray signature, QByteArray serverCertificate){    BIO* bio = BIO_new_mem_buf(serverCertificate.data(), -1);    THROW_BAD_ALLOC_IF_NULL(bio);    X509* cert = PEM_read_bio_X509(bio, nullptr, nullptr, nullptr);    BIO_free_all(bio);    EVP_PKEY* pubKey = X509_get_pubkey(cert);    THROW_BAD_ALLOC_IF_NULL(pubKey);    EVP_MD_CTX* mdctx = EVP_MD_CTX_create();    THROW_BAD_ALLOC_IF_NULL(mdctx);    EVP_DigestVerifyInit(mdctx, nullptr, EVP_sha256(), nullptr, pubKey);    EVP_DigestVerifyUpdate(mdctx, data.data(), data.length());    int result = EVP_DigestVerifyFinal(mdctx, reinterpret_cast<unsigned char*>(signature.data()), signature.length());    EVP_PKEY_free(pubKey);    EVP_MD_CTX_destroy(mdctx);    X509_free(cert);    return result > 0;}
开发者ID:wwssr3,项目名称:moonlight-qt,代码行数:25,


示例7: swupdate_HASH_cleanup

void swupdate_HASH_cleanup(struct swupdate_digest *dgst){	if (dgst) {		EVP_MD_CTX_destroy(dgst->ctx);		free(dgst);		dgst = NULL;	}}
开发者ID:3mdeb,项目名称:swupdate,代码行数:8,


示例8: sldns_digest_evp

intsldns_digest_evp(unsigned char* data, unsigned int len, unsigned char* dest,	const EVP_MD* md){	EVP_MD_CTX* ctx;	ctx = EVP_MD_CTX_create();	if(!ctx)		return 0;	if(!EVP_DigestInit_ex(ctx, md, NULL) ||		!EVP_DigestUpdate(ctx, data, len) ||		!EVP_DigestFinal_ex(ctx, dest, NULL)) {		EVP_MD_CTX_destroy(ctx);		return 0;	}	EVP_MD_CTX_destroy(ctx);	return 1;}
开发者ID:FreeBSDFoundation,项目名称:freebsd,代码行数:17,


示例9: LUA_FUNCTION

static LUA_FUNCTION(openssl_digest_ctx_free){    EVP_MD_CTX *ctx = CHECK_OBJECT(1, EVP_MD_CTX, "openssl.evp_digest_ctx");    lua_pushnil(L);    lua_setmetatable(L, 1);    EVP_MD_CTX_destroy(ctx);    return 0;}
开发者ID:witchu,项目名称:lua-openssl,代码行数:8,


示例10: EVP_MD_CTX_destroy

Sha::~Sha(){	if(mdctx != nullptr)	{		EVP_MD_CTX_destroy(mdctx);		mdctx = nullptr;	}}
开发者ID:ivanmilov,项目名称:shaDir,代码行数:8,


示例11: sc_pkcs11_openssl_md_release

static void sc_pkcs11_openssl_md_release(sc_pkcs11_operation_t *op){	EVP_MD_CTX	*md_ctx = DIGEST_CTX(op);	if (md_ctx)		EVP_MD_CTX_destroy(md_ctx);	op->priv_data = NULL;}
开发者ID:chmurek1985,项目名称:OpenSC,代码行数:8,


示例12: signMsgRSA

int signMsgRSA(EVP_PKEY* key, const unsigned char* msg, 	unsigned char** sig, size_t* slen, size_t msglen){		EVP_MD_CTX* ctx = NULL;	const EVP_MD* md = NULL;		if(msg == NULL || sig == NULL || slen == NULL)		return 0;	ctx = EVP_MD_CTX_create();	md = EVP_get_digestbyname(hn);	if(md == NULL){		printf("ERR EVP_get_digestbyname/n");		return 0;			}	if(ctx == NULL){		printf("ERR EVP_MD_CTX_create/n");		return 0;			}	if(1 != EVP_DigestInit_ex(ctx, md, NULL)){		printf("ERR EVP_DigestInit_ex/n");		return 0;	}	if(1 != EVP_DigestSignInit(ctx, NULL, md, NULL, key)){		printf("ERR EVP_DigestSignInit/n");		return 0;	}	/*SE FIRMA EL MENSAJE*/	if(1 != EVP_DigestSignUpdate(ctx, msg, msglen)){		printf("ERR EVP_DigestSignUpdate/n");		return 0;	}	if(1 != EVP_DigestSignFinal(ctx, NULL, slen)){		printf("ERR EVP_DigestSignFinal/n");		return 0;		}	*sig = OPENSSL_malloc(*slen);		if(*sig == NULL){		printf("ERR OPENSSL_malloc/n");	}	if(1 != EVP_DigestSignFinal(ctx, *sig, slen)){		printf("ERR EVP_DigestSignFinal/n");		return 0;	}	EVP_MD_CTX_destroy(ctx);	ctx = NULL;	return 1;}
开发者ID:made1993,项目名称:chatlibgroupsig,代码行数:57,


示例13: opensslgost_destroyctx

static voidopensslgost_destroyctx(dst_context_t *dctx) {	EVP_MD_CTX *evp_md_ctx = dctx->ctxdata.evp_md_ctx;	if (evp_md_ctx != NULL) {		EVP_MD_CTX_destroy(evp_md_ctx);		dctx->ctxdata.evp_md_ctx = NULL;	}}
开发者ID:Distrotech,项目名称:bind,代码行数:9,


示例14: EVP_MD_CTX_destroy

bool Digest::shutdown() {											 //necessary IFF script uses pcre.    if (loaded) {        EVP_MD_CTX_destroy(context);    }    if ( lib_handle != nullptr ) {        dlclose(lib_handle);    }    return true;}
开发者ID:RedSnapper,项目名称:Obyx,代码行数:9,


示例15: calculateChecksumProto

int calculateChecksumProto(FILE *file, Song *s){	unsigned char digest[EVP_MAX_MD_SIZE];	EVP_MD_CTX *mdctx;	const EVP_MD *md;	int md_len;    md = EVP_get_digestbyname("SHA256");    mdctx = EVP_MD_CTX_create();    EVP_DigestInit_ex(mdctx, md, NULL);		int bufferSize = 4096;	char *buff = malloc(bufferSize);	if(!buff)		fatal_error("malloc failed/n");	int numBytesToRead = fileLen(file);	int currBytesRead =0;	int bytesRead = 0;	while(numBytesToRead>bytesRead)	{		/* checks if bytes to be read in this iteration are greater than buffer */		int currNumBytesToRead=(numBytesToRead-bytesRead>bufferSize)?bufferSize:numBytesToRead-bytesRead;		/* read bytes */		currBytesRead=fread(buff,1,currNumBytesToRead,file);		if(currBytesRead<= 0)			fatal_error("read failed/n"); 				/* update md5 calculation */		EVP_DigestUpdate(mdctx, buff, currNumBytesToRead);		/* calculate the total number of bytes read thus far */		bytesRead += currBytesRead;	}	EVP_DigestFinal_ex(mdctx, digest, &md_len);	EVP_MD_CTX_destroy(mdctx);	free(buff);		if(fseek(file, 0, SEEK_SET))		fatal_error("failed to return back to the beginning of the file/n");	//s->checksum = malloc(sizeof (unsigned char) * (md_len));	//memcpy(s->checksum, digest, md_len);	s->checksum.data = malloc(sizeof(unsigned char) * (md_len));	s->checksum.len = md_len;	memcpy(s->checksum.data, digest, md_len);		return 1;}
开发者ID:pstoica,项目名称:CS3251-project-4,代码行数:56,


示例16: main

int main(int argc, char** argv) {	EVP_MD_CTX* ctx;	const EVP_MD* md;	char* input_string;	unsigned char hash_value[EVP_MAX_MD_SIZE];	unsigned int hash_length;	char* digest_name = "sha1";	// check arguments	if(1 >= argc) {		fprintf(stderr, "%s <input_string> [digest type]/n", argv[0]);		exit(-1);	}	else if(3 == argc) {		// set the digest name		digest_name = (char*)calloc(strlen(argv[2])+1, sizeof(char));		if(NULL == digest_name) {			fprintf(stderr,"Allocate memory for digest_name error/n");			exit(-1);		}		strncpy(digest_name, argv[2], strlen(argv[2]));	}	// set the input string	input_string = (char*)calloc(strlen(argv[1])+1, sizeof(char));	if(NULL == input_string) {		fprintf(stderr,"Allocate memory for input_string error/n");		exit(-1);	}	strncpy(input_string, argv[1], strlen(argv[1]));	// load digest	OpenSSL_add_all_digests();	// set digest type	md = EVP_get_digestbyname(digest_name);	if(!md) {		fprintf(stderr,"Unknown message digest/n");		exit(-1);	}	// create and process	ctx = EVP_MD_CTX_create();	EVP_DigestInit_ex(ctx, md, NULL);	EVP_DigestUpdate(ctx, input_string, strlen(input_string));	EVP_DigestFinal_ex(ctx, hash_value, &hash_length);	EVP_MD_CTX_destroy(ctx);	printf("Digest is:/n");	for(unsigned int i=0; i<hash_length; i++) {		printf("%02x", hash_value[i]);	}	printf("/n");	return 0;}
开发者ID:tyler-lee,项目名称:programs-learning,代码行数:56,


示例17: UNUSED

int EnclaveCreatorST::destroy_enclave(sgx_enclave_id_t enclave_id, uint64_t enclave_size){    UNUSED(enclave_id);    UNUSED(enclave_size);    if(m_ctx){        EVP_MD_CTX_destroy(m_ctx);        m_ctx = NULL;    }    return SGX_SUCCESS;}
开发者ID:01org,项目名称:linux-sgx,代码行数:10,


示例18: CC_EVP

void CC_EVP(const EVP_MD *evp, uint32_t mlen, const void *data, uint32_t len, unsigned char *md){	unsigned int mdlen = mlen;	EVP_MD_CTX* c = EVP_MD_CTX_create();	EVP_MD_CTX_init(c);	EVP_DigestInit(c, evp);	EVP_DigestUpdate(c, data, len);	EVP_DigestFinal(c, md, &mdlen);		EVP_MD_CTX_destroy(c);			}
开发者ID:jpupier,项目名称:4d-plugin-oauth,代码行数:10,


示例19: digest_public_modulus

// digest_public_modulus: calculates the SHA256 digest of the// hexadecimal representation of the public modulus of an RSA// key. digest must be initialized with at least 32 bytes of// space and is used to return the SHA256 digest.static void digest_public_modulus(RSA *key, BYTE *digest) {  char *hex;  EVP_MD_CTX *ctx = EVP_MD_CTX_create();  EVP_DigestInit_ex(ctx, EVP_sha256(), 0);  hex = BN_bn2hex(key->n);  EVP_DigestUpdate(ctx, hex, strlen(hex));  EVP_DigestFinal_ex(ctx, digest, 0);  EVP_MD_CTX_destroy(ctx);  OPENSSL_free(hex);}
开发者ID:InfoHunter,项目名称:keyless,代码行数:14,


示例20: BN_num_bytes

Hash *HashNewFromKey(const RSA *rsa, HashMethod method){    if (!rsa)    {        return NULL;    }    if (method >= HASH_METHOD_NONE)    {        return NULL;    }    EVP_MD_CTX *context = NULL;    const EVP_MD *md = NULL;    int md_len = 0;    unsigned char *buffer = NULL;    int buffer_length = 0;    int actual_length = 0;    if (rsa->n)    {        buffer_length = (size_t) BN_num_bytes(rsa->n);    }    else    {        buffer_length = 0;    }    if (rsa->e)    {        if (buffer_length < (size_t) BN_num_bytes(rsa->e))        {            buffer_length = (size_t) BN_num_bytes(rsa->e);        }    }    md = EVP_get_digestbyname(CF_DIGEST_TYPES[method]);    if (md == NULL)    {        Log(LOG_LEVEL_INFO, "Digest type %s not supported by OpenSSL library", CF_DIGEST_TYPES[method]);        return NULL;    }    Hash *hash = HashBasicInit(method);    context = EVP_MD_CTX_create();    EVP_DigestInit_ex(context, md, NULL);    buffer = xmalloc(buffer_length);    actual_length = BN_bn2bin(rsa->n, buffer);    EVP_DigestUpdate(context, buffer, actual_length);    actual_length = BN_bn2bin(rsa->e, buffer);    EVP_DigestUpdate(context, buffer, actual_length);    EVP_DigestFinal_ex(context, hash->digest, &md_len);    EVP_MD_CTX_destroy(context);    free (buffer);    /* Update the printable representation */    HashCalculatePrintableRepresentation(hash);    /* Return the hash */    return hash;}
开发者ID:lra,项目名称:core,代码行数:55,


示例21: _krb5_evp_digest_iov

int_krb5_evp_digest_iov(krb5_crypto crypto,		     const struct krb5_crypto_iov *iov,		     int niov,		     void *hash,		     unsigned int *hsize,		     const EVP_MD *md,		     ENGINE *engine){    EVP_MD_CTX *ctx;    int ret, i;    krb5_data current = {0,0};    if (crypto != NULL) {	if (crypto->mdctx == NULL)	    crypto->mdctx = EVP_MD_CTX_create();	if (crypto->mdctx == NULL)	    return 0;	ctx = crypto->mdctx;    } else        ctx = EVP_MD_CTX_create();    ret = EVP_DigestInit_ex(ctx, md, engine);    if (ret != 1)	goto out;    for (i = 0; i < niov; i++) {        if (_krb5_crypto_iov_should_sign(&iov[i])) {	    if ((char *)current.data + current.length == iov[i].data.data) {		current.length += iov[i].data.length;	    } else {		if (current.data) {		    ret = EVP_DigestUpdate(ctx, current.data, current.length);		    if (ret != 1)		        goto out;		}		current = iov[i].data;	    }	}    }    if (current.data) {	ret = EVP_DigestUpdate(ctx, current.data, current.length);	if (ret != 1)	    goto out;    }    ret = EVP_DigestFinal_ex(ctx, hash, hsize);out:    if (crypto == NULL)        EVP_MD_CTX_destroy(ctx);    return ret;}
开发者ID:DavidMulder,项目名称:heimdal,代码行数:55,


示例22: digest_fdigest

static int digest_fdigest(lua_State *L){  const char *type_name = luaL_checkstring(L, 2);  const EVP_MD *type = EVP_get_digestbyname(type_name);  const char *s = luaL_checkstring(L, 3);  unsigned char digest[EVP_MAX_MD_SIZE];  unsigned int written = 0;  EVP_MD_CTX *c;  if (type == NULL) {    luaL_argerror(L, 1, "invalid digest type");    return 0;  }  c = EVP_MD_CTX_create();  if (!EVP_DigestInit_ex(c, type, NULL)) {    EVP_MD_CTX_destroy(c);    return crypto_error(L);  }  if (!EVP_DigestUpdate(c, s, lua_strlen(L, 3))) {    EVP_MD_CTX_destroy(c);    return crypto_error(L);  }  if (!EVP_DigestFinal_ex(c, digest, &written)) {    EVP_MD_CTX_destroy(c);    return crypto_error(L);  }  EVP_MD_CTX_destroy(c);  if (lua_toboolean(L, 4))    lua_pushlstring(L, (char *)digest, written);  else {    char *hex = (char*)calloc(sizeof(char), written*2 + 1);    unsigned int i;    for (i = 0; i < written; i++)      sprintf(hex + 2*i, "%02x", digest[i]);    lua_pushlstring(L, hex, written*2);    free(hex);  }  return 1;}
开发者ID:dtiedy,项目名称:luaplus51-all,代码行数:42,


示例23: destroy_digest_context

/*! * /brief Destroy message digest context. * * /param context  Context to be freed. * * /return Always KNOT_EOK. */static int destroy_digest_context(EVP_MD_CTX **context){	assert(context);	if (*context) {		EVP_MD_CTX_destroy(*context);		*context = NULL;	}	return KNOT_EOK;}
开发者ID:stribika,项目名称:curveprotect,代码行数:18,


示例24: ikrt_openssl_evp_md_ctx_destroy

ikptrikrt_openssl_evp_md_ctx_destroy (ikptr s_ctx, ikpcb * pcb){#ifdef HAVE_EVP_MD_CTX_DESTROY  EVP_MD_CTX *	ctx = IK_EVP_MD_CTX(s_ctx);  EVP_MD_CTX_destroy(ctx);  return IK_VOID;#else  feature_failure(__func__);#endif}
开发者ID:marcomaggi,项目名称:vicare-openssl,代码行数:11,


示例25: ssl3_free_digest_list

void ssl3_free_digest_list(SSL *s) 	{	int i;	if (!s->s3->handshake_dgst) return;	for (i=0;i<SSL_MAX_DIGEST;i++) 		{		if (s->s3->handshake_dgst[i])			EVP_MD_CTX_destroy(s->s3->handshake_dgst[i]);		}	OPENSSL_free(s->s3->handshake_dgst);	s->s3->handshake_dgst=NULL;	}	
开发者ID:DJHartley,项目名称:openssl,代码行数:12,


示例26: lws_genhmac_destroy

intlws_genhmac_destroy(struct lws_genhmac_ctx *ctx, void *result){	size_t size = lws_genhmac_size(ctx->type);	int n = EVP_DigestSignFinal(ctx->ctx, result, &size);	EVP_MD_CTX_destroy(ctx->ctx);	if (n != 1)		return -1;	return 0;}
开发者ID:PKRoma,项目名称:libwebsockets,代码行数:12,


示例27: opensslecdsa_destroyctx

static voidopensslecdsa_destroyctx(dst_context_t *dctx) {	EVP_MD_CTX *evp_md_ctx = dctx->ctxdata.evp_md_ctx;	REQUIRE(dctx->key->key_alg == DST_ALG_ECDSA256 ||		dctx->key->key_alg == DST_ALG_ECDSA384);	if (evp_md_ctx != NULL) {		EVP_MD_CTX_destroy(evp_md_ctx);		dctx->ctxdata.evp_md_ctx = NULL;	}}
开发者ID:SvenDowideit,项目名称:clearlinux,代码行数:12,



注:本文中的EVP_MD_CTX_destroy函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ EVP_MD_CTX_free函数代码示例
C++ EVP_MD_CTX_create函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。