首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

[OpenSSL][原]取得文件签名

2012-12-15 
[OpenSSL][原]获得文件签名测试数据链接:http://jacky-dai.iteye.com/admin/blogs/1743774#include opens

[OpenSSL][原]获得文件签名
测试数据链接:http://jacky-dai.iteye.com/admin/blogs/1743774

#include <openssl/rsa.h>  #include <openssl/evp.h>  #pragma comment(lib, "libeay32.lib") void ReverseBuffer(unsigned char *pBuf, unsigned long ulLen){    if(0 == ulLen)    {        return;    }    //char tmp;    unsigned char ucTemp;    for(unsigned long i = 0, j = ulLen-1; i < ulLen/2; i++, j--)    {        ucTemp = pBuf[i];        pBuf[i] = pBuf[j];        pBuf[j] = ucTemp;    }}void OpenSSLGenFileSignature_byFile(){    RSA* rsa = RSA_new();    MSkeyConvertToOpenSSLKey("Test_1024_Key.prv", *rsa);    EVP_PKEY *evpKey = EVP_PKEY_new(); //新建一个EVP_PKEY变量    EVP_PKEY_set1_RSA(evpKey, rsa);    const EVP_MD* algrothm = EVP_sha1();    EVP_MD_CTX mdctx;    EVP_MD_CTX_init(&mdctx);    EVP_VerifyInit_ex(&mdctx, algrothm, NULL);    byte file[512] = {0};    DWORD dwFileSize = sizeof(file);    ReadBufferFromFile("PublicKey.bin", file, &dwFileSize);    EVP_SignUpdate(&mdctx, file, dwFileSize);    BYTE signValue[128] = {0};    UINT signLen = 0;    EVP_SignFinal(&mdctx, signValue, &signLen, evpKey);    EVP_MD_CTX_cleanup(&mdctx);    EVP_PKEY_free(evpKey);    RSA_free(rsa);}void OpenSSLGenFileSignature_byFileHash(){    RSA* rsa = RSA_new();    MSkeyConvertToOpenSSLKey("Test_1024_Key.prv", *rsa);    const EVP_MD* algrothm = EVP_sha1();    byte byHashData[32] = {0};    DWORD dwHashSize = sizeof(byHashData);    ReadBufferFromFile("HashData.bin", byHashData, &dwHashSize);    ReverseBuffer(byHashData, dwHashSize);    byte bySignedBuf[512] = {0};    UINT nSignSize = 0;    int nRet = RSA_sign(algrothm->type, byHashData, (UINT)dwHashSize, bySignedBuf, &nSignSize, rsa);    RSA_free(rsa);}

热点排行