当前位置: 首页 > news >正文

电子商务基础网站建设与维护单项选择题网站开发人员薪资

电子商务基础网站建设与维护单项选择题,网站开发人员薪资,襄阳网站建设,恩施做网站公司文章目录 openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c概述笔记END openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c 概述 DSA签名(摘要算法SHA256), DSA验签(摘要算法SHA256) 签名 : 用发送者的私钥进行签名. 验签 : 用发送者的公… 文章目录 openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c概述笔记END openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c 概述 DSA签名(摘要算法SHA256), DSA验签(摘要算法SHA256) 签名 : 用发送者的私钥进行签名. 验签 : 用发送者的公钥进行验签. 看下API调用顺序就行, 自己弄的时候, 跟着demo的流程弄就行. 对于openssl3.2, 越看越眼熟了. 笔记 /*! \file EVP_DSA_Signature_demo.c \note openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.cDSA签名(摘要算法SHA256), DSA验签(摘要算法SHA256) 签名 : 用发送者的私钥进行签名. 验签 : 用发送者的公钥进行验签.看下API调用顺序就行, 自己弄的时候, 跟着demo的流程弄就行. 对于openssl3.2, 越看越眼熟了. *//*-* Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved.** Licensed under the Apache License 2.0 (the License). You may not use* this file except in compliance with the License. You can obtain a copy* in the file LICENSE in the source distribution or at* https://www.openssl.org/source/license.html*//** An example that uses the EVP_PKEY*, EVP_DigestSign* and EVP_DigestVerify** methods to calculate public/private DSA keypair and to sign and verify* two static buffers.*/#include string.h #include stdio.h #include openssl/err.h #include openssl/evp.h #include openssl/decoder.h #include openssl/dsa.h#include my_openSSL_lib.h/** This demonstration will calculate and verify a signature of data using* the soliloquy from Hamlet scene 1 act 3*/static const char *hamlet_1 To be, or not to be, that is the question,\nWhether tis nobler in the minde to suffer\nThe slings and arrowes of outragious fortune,\nOr to take Armes again in a sea of troubles,\n ; static const char *hamlet_2 And by opposing, end them, to die to sleep;\nNo more, and by a sleep, to say we end\nThe heart-ache, and the thousand natural shocks\nThat flesh is heir to? tis a consumation\n ;static const char ALG[] DSA; static const char DIGEST[] SHA256; static const int NUMBITS 2048; static const char * const PROPQUERY NULL;static int generate_dsa_params(OSSL_LIB_CTX *libctx,EVP_PKEY **p_params) {int ret 0;EVP_PKEY_CTX *pkey_ctx NULL;EVP_PKEY *params NULL;pkey_ctx EVP_PKEY_CTX_new_from_name(libctx, ALG, PROPQUERY);if (pkey_ctx NULL)goto end;if (EVP_PKEY_paramgen_init(pkey_ctx) 0)goto end;if (EVP_PKEY_CTX_set_dsa_paramgen_bits(pkey_ctx, NUMBITS) 0)goto end;if (EVP_PKEY_paramgen(pkey_ctx, params) 0)goto end;if (params NULL)goto end;ret 1; end:if(ret ! 1) {EVP_PKEY_free(params);params NULL;}EVP_PKEY_CTX_free(pkey_ctx);*p_params params;fprintf(stdout, Params:\n);EVP_PKEY_print_params_fp(stdout, params, 4, NULL);fprintf(stdout, \n);return ret; }static int generate_dsa_key(OSSL_LIB_CTX *libctx,EVP_PKEY *params,EVP_PKEY **p_pkey) {int ret 0;EVP_PKEY_CTX *ctx NULL;EVP_PKEY *pkey NULL;ctx EVP_PKEY_CTX_new_from_pkey(libctx, params,NULL);if (ctx NULL)goto end;if (EVP_PKEY_keygen_init(ctx) 0)goto end;if (EVP_PKEY_keygen(ctx, pkey) 0)goto end;if (pkey NULL)goto end;ret 1; end:if(ret ! 1) {EVP_PKEY_free(pkey);pkey NULL;}EVP_PKEY_CTX_free(ctx);*p_pkey pkey;fprintf(stdout, Generating public/private key pair:\n);EVP_PKEY_print_public_fp(stdout, pkey, 4, NULL);fprintf(stdout, \n);EVP_PKEY_print_private_fp(stdout, pkey, 4, NULL);fprintf(stdout, \n);EVP_PKEY_print_params_fp(stdout, pkey, 4, NULL);fprintf(stdout, \n);return ret; }static int extract_public_key(const EVP_PKEY *pkey,OSSL_PARAM **p_public_key) {int ret 0;OSSL_PARAM *public_key NULL;if (EVP_PKEY_todata(pkey, EVP_PKEY_PUBLIC_KEY, public_key) ! 1)goto end;ret 1; end:if (ret ! 1) {OSSL_PARAM_free(public_key);public_key NULL;}*p_public_key public_key;return ret; }static int extract_keypair(const EVP_PKEY *pkey,OSSL_PARAM **p_keypair) {int ret 0;OSSL_PARAM *keypair NULL;if (EVP_PKEY_todata(pkey, EVP_PKEY_KEYPAIR, keypair) ! 1)goto end;ret 1; end:if (ret ! 1) {OSSL_PARAM_free(keypair);keypair NULL;}*p_keypair keypair;return ret; }static int demo_sign(OSSL_LIB_CTX *libctx,size_t *p_sig_len, unsigned char **p_sig_value,OSSL_PARAM keypair[]) {int ret 0;size_t sig_len 0;unsigned char *sig_value NULL;EVP_MD_CTX *ctx NULL;EVP_PKEY_CTX *pkey_ctx NULL;EVP_PKEY *pkey NULL;pkey_ctx EVP_PKEY_CTX_new_from_name(libctx, ALG, PROPQUERY);if (pkey_ctx NULL)goto end;if (EVP_PKEY_fromdata_init(pkey_ctx) ! 1)goto end;if (EVP_PKEY_fromdata(pkey_ctx, pkey, EVP_PKEY_KEYPAIR, keypair) ! 1)goto end;ctx EVP_MD_CTX_create();if (ctx NULL)goto end;if (EVP_DigestSignInit_ex(ctx, NULL, DIGEST, libctx, NULL, pkey, NULL) ! 1)goto end;if (EVP_DigestSignUpdate(ctx, hamlet_1, sizeof(hamlet_1)) ! 1)goto end;if (EVP_DigestSignUpdate(ctx, hamlet_2, sizeof(hamlet_2)) ! 1)goto end;/* Calculate the signature size */if (EVP_DigestSignFinal(ctx, NULL, sig_len) ! 1)goto end;if (sig_len 0)goto end;sig_value OPENSSL_malloc(sig_len);if (sig_value NULL)goto end;/* Calculate the signature */if (EVP_DigestSignFinal(ctx, sig_value, sig_len) ! 1)goto end;ret 1; end:EVP_MD_CTX_free(ctx);if (ret ! 1) {OPENSSL_free(sig_value);sig_len 0;sig_value NULL;}*p_sig_len sig_len;*p_sig_value sig_value;EVP_PKEY_free(pkey);EVP_PKEY_CTX_free(pkey_ctx);fprintf(stdout, Generating signature:\n);BIO_dump_indent_fp(stdout, sig_value, (int)sig_len, 2);fprintf(stdout, \n);return ret; }static int demo_verify(OSSL_LIB_CTX *libctx,size_t sig_len, unsigned char *sig_value,OSSL_PARAM public_key[]) {int ret 0;EVP_MD_CTX *ctx NULL;EVP_PKEY_CTX *pkey_ctx NULL;EVP_PKEY *pkey NULL;pkey_ctx EVP_PKEY_CTX_new_from_name(libctx, ALG, PROPQUERY);if (pkey_ctx NULL)goto end;if (EVP_PKEY_fromdata_init(pkey_ctx) ! 1)goto end;if (EVP_PKEY_fromdata(pkey_ctx, pkey, EVP_PKEY_PUBLIC_KEY, public_key) ! 1)goto end;ctx EVP_MD_CTX_create();if(ctx NULL)goto end;if (EVP_DigestVerifyInit_ex(ctx, NULL, DIGEST, libctx, NULL, pkey, NULL) ! 1)goto end;if (EVP_DigestVerifyUpdate(ctx, hamlet_1, sizeof(hamlet_1)) ! 1)goto end;if (EVP_DigestVerifyUpdate(ctx, hamlet_2, sizeof(hamlet_2)) ! 1)goto end;if (EVP_DigestVerifyFinal(ctx, sig_value, sig_len) ! 1)goto end;ret 1; end:EVP_PKEY_free(pkey);EVP_PKEY_CTX_free(pkey_ctx);EVP_MD_CTX_free(ctx);return ret; }int main(void) {int ret EXIT_FAILURE;OSSL_LIB_CTX *libctx NULL;EVP_PKEY *params NULL;EVP_PKEY *pkey NULL;OSSL_PARAM *public_key NULL;OSSL_PARAM *keypair NULL;size_t sig_len 0;unsigned char *sig_value NULL;libctx OSSL_LIB_CTX_new();if (libctx NULL)goto end;if (generate_dsa_params(libctx, params) ! 1)goto end;if (generate_dsa_key(libctx, params, pkey) ! 1)goto end;if (extract_public_key(pkey, public_key) ! 1)goto end;if (extract_keypair(pkey, keypair) ! 1)goto end;/* The signer signs with his private key, and distributes his public key */if (demo_sign(libctx, sig_len, sig_value, keypair) ! 1)goto end;/* A verifier uses the signers public key to verify the signature */if (demo_verify(libctx, sig_len, sig_value, public_key) ! 1)goto end;ret EXIT_SUCCESS; end:if (ret ! EXIT_SUCCESS)ERR_print_errors_fp(stderr);OPENSSL_free(sig_value);EVP_PKEY_free(params);EVP_PKEY_free(pkey);OSSL_PARAM_free(public_key);OSSL_PARAM_free(keypair);OSSL_LIB_CTX_free(libctx);return ret; } END
http://www.zqtcl.cn/news/806686/

相关文章:

  • 网站怎么做排查修复关键词排名优化网站
  • 上海企业网站动易网站模版的制作
  • 北京网站建设华大网站模拟课堂模式应该怎么做
  • 站长工具 seo综合查询有新的wordpress更新是英文版
  • 做微信头图的网站成都做seo网站公司
  • 工程设计东莞网站建设技术支持wordpress+打断点
  • 一个域名可以绑定几个网站网站建设如何做账
  • PHP网站建设的课后笔记一个产品的营销方案
  • 宝塔linux面板官网泰州seo
  • 咸阳城乡建设局网站动漫网站设计方案
  • 狮岭网站建设怎么建设英文网站
  • 网站建设需要交印花税吗wordpress远程自动下载图片
  • 专门做外国的网站有哪些seo网络优化师就业前景
  • 安阳信息港网站门户网站的特点
  • 宏大建设集团网站婚恋网站建设的目的
  • 企业网站建设有什么好设计网站公司的账务处理
  • 网站备案有什么要求wordpress导航栏上方
  • 河南专业建网站wordpress seo模板
  • 网站开发的教学课程策划公司经营范围有哪些
  • 需要锦州网站建设男生和女生做污的事情免费网站
  • 互联网网站商标免费做h5的网站有哪些
  • 营销型网站五大系统 单仁深圳住房与建设局官网
  • nas 做网站wordpress音乐门户主题
  • 企业邮箱163登录入口seo建站需求
  • 外贸企业网站源码下载域名和服务器多少钱
  • 镇江专业建网站建设外汇网站
  • 网站关键词优化软件效果wordpress如何网站顶部右侧广告
  • seo整站优化报价wordpress网站资源
  • 假冒彩票网站开发仿小刀娱乐wordpress主题
  • 东光做淘宝网站古色古香的网站模板