"); //-->
基于Gmssl的SM2加解密算法Demo
GmSSL介绍
Gmssl介绍:http://gmssl.org/
当然本文也是参考 http://gmssl.org/
其中SM2为非对称算法
pair<string, string> GenKey(void)
{
EC_KEY *keypair = NULL;
EC_GROUP *group1 = NULL;
keypair = EC_KEY_new();
if(!keypair) {
cout << "Failed to Gen Key" << endl;
exit(1);
}
group1 = EC_GROUP_new_by_curve_name(NID_sm2p256v1);
if(group1 == NULL){
cout << "Failed to Gen Key" << endl;
exit(1);
}
int ret1 = EC_KEY_set_group(keypair, group1);
if(ret1 != 1){
cout << "Failed to Gen Key" << endl;
exit(1);
}
int ret2 = EC_KEY_generate_key(keypair);
if(ret2 != 1){
cout << "Failed to Gen Key" << endl;
exit(1);
}
size_t pri_len;
size_t pub_len;
char *pri_key = NULL;
char *pub_key = NULL;
BIO *pri = BIO_new(BIO_s_mem());
BIO *pub = BIO_new(BIO_s_mem());
PEM_write_bio_ECPrivateKey(pri, keypair, NULL, NULL, 0, NULL, NULL);
PEM_write_bio_EC_PUBKEY(pub, keypair);
pri_len = BIO_pending(pri);
pub_len = BIO_pending(pub);
pri_key = new char[pri_len + 1];
pub_key = new char[pub_len + 1];
BIO_read(pri, pri_key, pri_len);
BIO_read(pub, pub_key, pub_len);
pri_key[pri_len] = '\0';
pub_key[pub_len] = '\0';
string public_key = pub_key;
string private_key = pri_key;
EC_KEY_free(keypair);
BIO_free_all(pub);
BIO_free_all(pri);
delete [] pri_key;
delete [] pub_key;
return std::pair<string, string>(public_key, private_key);
}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
已字符串形式的返回,主要考虑我们在实际运用中,可能需要传递密钥信息,所以生成的SM2公钥和私钥以字符串形式返回。
从字符串类型的密钥中生成出来EC_KEY对象
EC_KEY* CreateEC(unsigned char* key, int is_public)
{
EC_KEY *ec_key = NULL;
BIO *keybio = NULL;
keybio = BIO_new_mem_buf(key, -1);
if (keybio==NULL) {
cout << "Failed to Get Key" << endl;
exit(1);
}
if(is_public) {
ec_key = PEM_read_bio_EC_PUBKEY(keybio, NULL, NULL, NULL);
}
else {
ec_key = PEM_read_bio_ECPrivateKey(keybio, NULL, NULL, NULL);
}
if(ec_key == NULL) {
cout << "Failed to Get Key" << endl;
exit(1);
}
return ec_key;
}12345678910111213141516171819202122232425这里使用的加密函数为SM2_encrypt_with_recommended
这里使用的解密函数为SM2_decrypt_with_recommended
下载:https://download.csdn.net/download/liulangaliulang/10884044
用例运行结果:
https://blog.csdn.net/liulangaliulang/article/details/85329878
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
利用MEMS惯性传感器实现头部冲击遥测系统
Intel、台积电、三星激战2nm!三巨头先进工艺制程进度一览
555冰箱过压、欠压、断电延时保护电路
Actel FlashPro v3.1 User’s Guide
基础教程:模数转换器
二进制到十进制的转换
联电赴美合并格罗方德?英特尔也许是更好的选择
mpc860+vxWorks兼职招聘(上海)
日月光CPO装置 抢数据中心商机
FSC-1612V2N 主板新型录下载
创意推全球首款HBM4 IP 于台积电N3P制程成功投片
起底神秘半导体公司新凯来
柏拉图对爱和婚姻的启示(ZZ)
[求助]求助关于5402 PLL软件配置
555电冰箱压缩机工作限时器电路
基础教程:数模转换器
用过QT的请进来
李想呼吁别让自动驾驶变成文字游戏:建议统一中文名
吞吐量30倍提升!NVIDIA秀Blackwell性能:打破MLPerf记录居第一
555多功能电冰箱保护器电路
EW8051-Insight ME52HU仿真器驱动程序
EW8051-ChipICE JEW79E825仿真器驱动程序
FPGA&SOPC开发快速入门教程
555冰箱外电路保护器电路
ADI高速ADC的行为模型及工具软件
认证FTP:地址+用户名+密码
ASML计划在日本扩增五倍EUV芯片工具员工
创新影响追踪:MEMS传感器如何改变游戏规则
555多功能电冰箱控制器电路
ADI公司MEMS陀螺仪的抗振性