openSSL学习笔记 数定签名与验证

 

#include #include #include #include #include void tSign() { unsigned char sign_value[1024]; //保存签名值的数组 int sign_len; //签名的长度 EVP_MD_CTX mdctx; //摘要算法上下文变量 char mess1[]="Text Message"; //签名的信息 RSA *rsa=NULL; //RSA结构体变量 EVP_PKEY *evpKey=NULL; //EVPKEY 结构体变量 int i; printf("正在产生RSA密钥...."); rsa=RSA_generate_key(1024,RSA_F4,NULL,NULL); //产生一个1024 位的RSA密钥 if (rsa==NULL) { printf("gen rsa err/n"); return; } printf("成功。/n"); evpKey=EVP_PKEY_new();//新建一个EVP_PKEY 变量 if (evpKey==NULL) { printf("EVP_PKEY_new err/n"); RSA_free(rsa); return; } if (EVP_PKEY_set1_RSA(evpKey,rsa) !=1) //保存RSA结构体到EVP_PKEY 结构体 { printf("EVP_PKEY_set1_RSA err/n"); RSA_free(rsa); EVP_PKEY_free(evpKey); return; } EVP_MD_CTX_init(&mdctx); //初始化摘要上下文 if (!EVP_SignInit_ex(&mdctx,EVP_md5(),NULL)) { printf("Init err/n"); EVP_PKEY_free(evpKey); RSA_free(rsa); return; } if (!EVP_SignUpdate(&mdctx,mess1,strlen(mess1))) //计算签名(摘要)Update { printf("EVP_SignUpdate err/n"); EVP_PKEY_free(evpKey); RSA_free(rsa); return; } if(!EVP_SignFinal(&mdctx,sign_value,(unsigned int *)(&sign_len),evpKey))//签名输出 { printf("EVP_SignFinal err /n"); EVP_PKEY_free(evpKey); RSA_free(rsa); return; } printf("消息/"%s/"的签名值是:/n",mess1); for(i=0;i

 

int main(){ tSign(); return 0; }

 

 

你可能感兴趣的:(随笔)