IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++国密算法SM2加密解密 -> 正文阅读

[C++知识库]c++国密算法SM2加密解密

c++国密算法SM2加密解密

一、代码

  • 封装和nodejs通讯接口:
    Encrpt_SM2_new()
    Decrypt_SM2_new()
    加密解密结果可以和nodejs的模块sm-crypto
    ,加密解密结果可以互相通讯
  • c++通讯接口采用
    Encrpt_SM2()
    Decrypt_SM2()
  • 源码下载地址
int main()
{
	int result;
	EccPoint p_publicKey ;
	uint8_t p_privateKey[NUM_ECC_DIGITS];
	uint8_t p_random[NUM_ECC_DIGITS];
	result=ecc_make_key(&p_publicKey, p_privateKey, p_random);

	int ret = 0;
	std::string plain_text = "encryption standard";
	unsigned char cplain_text[65535];
	plain_text.copy((char*)cplain_text, plain_text.length(), 0);
	unsigned char MessageInfo[20] = "junxue";

	unsigned char sendbuf[65535] = { 0 };
	ret = Encrpt_SM2(MessageInfo,7, sendbuf);
	int nSendLen = strlen((const char*)sendbuf);

	unsigned char recvbuf[65535] = { 0 };
	ret = Decrypt_SM2(sendbuf, 206, recvbuf);
/
	// added by junxue.zheng SM2加密
	std::string inputStr = "junxue"; //需要加密的字符串
	unsigned char inputChar[65535];            //字符串转换为char类型
	inputStr.copy((char*)inputChar, inputStr.length(), 0); 
	int inputLen = inputStr.length();//未加密前数据的长度

	unsigned char tempbuf[65535] = { 0 };
	ret = Encrpt_SM2_new(inputChar, inputLen, tempbuf);
	int tempLen = strlen((const char*)tempbuf);
	// 输出的就是发送给js解密的字符串,可以把以下打印出的字符发送给js解密验证
	printf("enc result:");
	printf("\n");
	int i = 0;
	for (i = 0; i < tempLen; i++)
	{
		printf("%02X", tempbuf[i]);
		//printf("%x", sendbuf[i]);
		if (1 == (i + 1) % 32 && i!=0)
			printf("\n");
	}
	printf("\n");

	// 解密nodejs发送的数据。若收到数据是string,则需要转换为char ,若收到的数据是char,则直接引用。以下以收到的数据为string为例说明;
	//std::string encData_recFrom_js = "04C438566F45FD66314C3D37410F8BC1DF19E8E6AF5F9882F1B89C9B3C04DD12EF2FDA590BEF45F6266871C349D3373A92B1174A2C2BE624996D9C260F4ED3B962A138F0418701B84656C2FE72FC2BB3E34CFF096E53F993CA5B2A26D40A07C74CFA422899843C0E3F";
	// encData_str是收到js发送的数据;
	std::string encData_str = "6d9e390cc6e44ec5c0ea67f060a8d099a18c34cf6fbada13bbed07bcbb567f737ddfa5672bc3cc34dcbb2a05c5491160a2afc40c0efb4475d08fadc249831c776e56fe1301a8541634056cfd879211b4b70d01f4a8580a578775c600947588e9a8d3ea210d7ff50bc9d2bd8a29c4711295241f76565c474cc077bd045b51e380181bd06726075335bf0b855033dbe554e255664d0cef605d023e15811a7342b0dd1a92bfa40bc5ca1a8d7f9b8ee5cf62e47e1f1b479b62e2af9e7e6578a91604c3146a8824c83b85ac5db8d0f72536";
	//std::string encData_str = "86B06E6D970B8808C9CDDC136F5CB1F3E7A1A537BAD64A74C09D88F6C2C44C6F06BD641F6D10925E154260F68CC867C4D7FADB66574790FD03CC77EB95E7F1F68A49D17616737C9381FDC44B89D71AB6F2FA2881A8FBA55CCD2599DBBFE5D4939FF9A81AF509E577B8C10009F9011841030AC1C142803305B8805E31BA8519BA0624D6458AA619A32FB0ACB640AEDA3FCFFC622249318A31296D06AEFFBD637EF6F6BF831ED0D9FFCB78DC598E212F3A2BAC7DF2EEDAD23D87198732268383CC10EAF5127BB2AF6F17F30C4176AE1F";
	
	int encDataLen = encData_str.length();
	unsigned char encData_char[65535];
	unsigned char decData[65535];
	encData_str.copy((char*)encData_char, encDataLen, 0);

	//for (int j = 0;j < encDataLen;j++)
	//{
	//	if (islower(encData_char[j])) {
	//		encData_char[j] = toupper(encData_char[j]);
	//	}
	//}
	//unsigned char encData_hex[65535];
	//tohex(encData_char, encData_hex, encDataLen);
	/*int len_hex = encDataLen / 2*/;
	ret = Decrypt_SM2_new(encData_char, encDataLen, decData);

	//sm2_encryptandDecrypt();
	system("pause");
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 11:41:17  更:2021-08-27 11:43:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:27:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码