0
点赞
收藏
分享

微信扫一扫

openssl之DSA密钥生成

#include "dsa_alg.h"
#include<openssl/dsa.h>
#include<string.h>

#include <openssl/rsa.h>
#include <openssl/bio.h>
#include <openssl/buffer.h>
#include <memory>
#include <cassert>
#include <string>
#include<iostream>
using namespace std;
#define ASSERT assert

using BN_ptr = std::unique_ptr<BIGNUM, decltype(&::BN_free)>;
using DSA_ptr = std::unique_ptr<DSA, decltype(&::DSA_free)>;
using BIO_MEM_ptr = std::unique_ptr<BIO, decltype(&::BIO_free)>;
int generate_dsa()
{

DSA_ptr dsa(DSA_new(), ::DSA_free);
int ret,i;
unsigned char seed[20];
BIO_MEM_ptr bio(BIO_new(BIO_s_mem()), ::BIO_free);
for(i=0;i<20;i++)
memset(seed+i,i,1);
//ret=DSA_generate_parameters_ex(d, 512,seed, 20, &counter,&h,NULL);
/* 生成密钥参数 */
ret=DSA_generate_parameters_ex(dsa.get(), 1024,NULL,0,NULL,NULL,NULL);
if(ret!=1)
{
return -1;
}

/* 生成密钥 */
ret=DSA_generate_key(dsa.get());
if(ret!=1)
{
return -1;
}
int rc = DSA_print(bio.get(), dsa.get(), 0);
ASSERT(rc == 1);
BUF_MEM* mem = NULL;
BIO_get_mem_ptr(bio.get(), &mem);
ASSERT(mem != NULL);
string s;
if(mem->data && mem->length)
s.assign(mem->data, mem->length);
if(s.length())
cout << s << endl;
else
cout << "Failed to retrieve key" << endl;

return 0;
}

output:

Private-Key: (1024 bit)
priv:
1e:c4:36:ed:97:17:87:c7:ca:95:d0:c9:ba:ed:c0:
4e:f6:59:79:17
pub:
17:21:a5:26:e7:69:9e:27:de:28:e9:78:36:6e:03:
0d:d9:36:7d:66:f6:d7:1e:f0:bc:99:89:24:a6:0a:
30:e7:0c:cc:ab:e5:36:54:f1:27:7a:ea:5e:4b:ba:
04:01:61:ed:ad:90:a9:71:ad:7b:3d:16:7f:9e:79:
6d:21:c9:db:4f:db:f1:d8:c2:a1:22:eb:15:bd:08:
2d:2c:cf:c4:df:21:14:12:c9:56:dd:e2:9a:dd:82:
56:78:76:51:b0:10:f3:6f:84:17:e9:9a:ca:e5:96:
a5:6b:0c:24:0c:d2:24:97:7c:d5:d1:70:65:62:89:
b7:f1:60:9e:dd:c9:f3:9c
P:
00:e6:51:21:fc:8d:15:96:2b:07:6d:53:14:1d:f5:
a2:b6:ab:1f:00:27:b2:61:7d:af:89:03:78:d9:bc:
4b:83:00:f8:d0:b7:73:de:50:a6:5e:ae:11:a4:04:
c4:91:e2:72:f0:84:7d:ba:01:70:10:db:34:4f:65:
30:7f:21:e1:8e:66:2e:36:99:52:9f:28:03:47:6a:
11:9d:23:9a:ef:17:92:10:73:95:b4:85:0f:3a:d4:
30:50:92:0c:f5:15:8b:3a:d8:8d:47:95:aa:fd:50:
1a:2b:46:6d:5e:75:d2:af:62:06:85:6f:01:87:67:
fc:92:17:9a:5e:6f:e9:0d:27
Q:
00:9d:24:a4:fb:23:4a:27:b1:51:4b:7a:e9:a5:a9:
58:e3:0c:38:90:93
G:
63:55:15:c9:cb:59:98:11:3c:6a:fd:9f:eb:c5:91:
27:b1:50:f1:ec:40:5c:2c:21:3a:b3:75:0a:ad:43:
18:60:23:18:34:fd:11:f0:ab:ab:e7:cf:3f:d4:3e:
2a:dc:60:b2:4e:00:47:ff:82:6a:f9:c7:88:1f:5f:
a4:89:50:ef:8b:47:1e:c7:c0:86:ad:1f:51:4c:3d:
20:58:14:81:4e:96:34:dc:f4:0a:b5:51:02:4e:7f:
b9:bd:aa:81:ee:e1:46:cb:e4:b7:52:80:2a:4e:90:
d0:9f:e5:2d:c4:a5:ee:5c:4c:94:46:13:52:9e:03:
aa:6f:46:9e:f1:9d:48:a1


举报

相关推荐

0 条评论