
最近,我花了一些时间研究数字签名,因为电子签名在当今时代是如此重要,而电子商务,银行,电子政务和许多其他领域却与之密不可分. 关于电子签名,我们必须首先介绍一些基本概念.
一次对称加密
所谓的对称加密意味着加密和解密使用相同的密钥. 对称加密的特点是: 加密效率高,速度快,但是由于使用相同的密钥进行加密和解密,因此保护密钥的安全性是一个问题.
另一个: 基于密钥的加密是密码学的一大进步,因为密钥的替换非常容易,并且算法的开发和替换相对昂贵.
第二次非对称加密
非对称加密意味着将不同的密钥用于加密和解密. 最常见的算法是RSA,以发明人的名字命名. 要使用一个密钥加密,请使用另一个密钥解密. 这两个密钥之一是私钥(自我使用,自我控制),另一个是公钥(每个人都使用它,每个人都知道).
三,汇总算法
对于文本或文件,计算一条固定长度的信息,称为摘要信息,常用算法为: MD5,SHA1. 不同的文本或文档摘要是不同的,摘要信息就像文档的指纹一样.
所谓的电子签名是先计算文档的摘要信息,然后使用私钥进行加密,这个过程就是电子签名. 验证电子签名时vc 获取数字签名,请使用公钥解密签名信息以获得摘要信息,然后再次计算文档的摘要信息. 如果两个摘要信息相同,则称为电子签名匹配. 如果两个摘要信息相同,则表示该文档尚未修改vc 获取数字签名,并且由签名者签发.
电子签名与文件签名具有相同的功能. 使用电子签名也可以确认以下两点:
首先,消息是由签名者发送的;

第二,自发布和接收信息以来,该信息未被修改.
开发电子签名程序有两种常用方法,一种是使用开源的openssl库,另一种是使用Microsoft的cryptoAPI.
Openssl相对容易上手,并且可以跨平台,是开发人员的首选.
有许多使用openl在互联网上开发签名程序的示例,但是大多数示例在签名后直接得到验证. 该过程不够清晰,并且不包括读取私钥和公钥的功能,该功能还不够全面. 我使用了openssl开发套件来制作用于签名和验证的更完整的原型. 签名和验证分为两个部分. 签名后,您可以直接进行验证,当然,它是成功的;您还可以修改签名对象或签名信息,然后验证是否成功.
两个核心功能如下,整个程序,请从我的网络硬盘上下载()
读取私钥的功能:
EVP_PKEY * LoadPrivateKey(const char *文件名,const char *密码)
{
BIO * bp;
EVP_PKEY * pkey;
如果((bp = BIO_new(BIO_s_file()))== NULL)

{
返回(NULL);
}
BIO_read_filename(bp,filename);
如果((pkey = PEM_read_bio_PrivateKey(bp,NULL,NULL,(char *)password))
== NULL)
{
BIO_free(bp);
返回(NULL);
}
BIO_free(bp);

返回(pkey);
}
读取公钥的功能:
EVP_PKEY * LoadPublicKey(const char *文件名)
{
FILE * fp;
fp = fopen(filename,“ rb”);
if(fp == NULL){
返回NULL;
}
unsigned char derCert [4096];

unsigned long derCertLen;
derCertLen = fread(derCert,1,sizeof(derCert)/ sizeof(derCert [0]),fp);
fclose(fp);
const unsigned char * pTmp = derCert;
X509 * x = d2i_X509(NULL,&pTmp,derCertLen);
if(x == NULL){
ERR_load_ERR_strings();
ERR_load_crypto_strings();
ERR_print_errors_fp(stderr);
返回NULL;
}
EVP_PKEY * pubKey = X509_get_pubkey(x);
返回pubKey;
}
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shouji/article-269165-1.html
不一样的感觉
看啦喜欢bb的声音太温暖啦
他的卫心Y㎝6ОЗ一开始我也不信