资源简介
国密算法sm2算法c语言实现,vc++环境,

代码片段和文件信息
/* 1、用户A选定一条适合加密的椭圆曲线Ep(ab)(如:y2=x3+ax+b),并取椭圆曲线上一点,作为基点G。
2、用户A选择一个私有密钥k,并生成公开密钥K=kG。
3、用户A将Ep(ab)和点K,G传给用户B。
4、用户B接到信息后 ,将待传输的明文编码到Ep(ab)上一点M,并产生一个随机整数r(r 5、用户B计算点C1=M+rK;C2=rG。
6、用户B将C1、C2传给用户A。
7、用户A接到信息后,计算C1-kC2,结果就是点M。因为
C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
再对点M进行解码就可以得到明文。
密码学中,描述一条Fp上的椭圆曲线,常用到六个参量:
T=(pabGnh)。
(p 、a 、b 用来确定一条椭圆曲线,G为基点,n为点G的阶,h 是椭圆曲线上所有点的个数m与n相除的整数部分)
这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件:
1、p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;
2、p≠n×h;
3、pt≠1 (mod n),1≤t<20;
4、4a3+27b2≠0 (mod p);
5、n 为素数;
6、h≤4。
*/
#include
#include
#include
#include
#include “tommath.h“
#include
#define BIT_LEN 800
#define KEY_LONG 128 //私钥比特长
#define P_LONG 200 //有限域P比特长
#define EN_LONG 40 //一次取明文字节数(x20)(y20)
//得到lon比特长素数
int GetPrime(mp_int *mint lon);
//得到B和G点X坐标G点Y坐标
void Get_B_X_Y(mp_int *x1mp_int *y1mp_int *b mp_int *a mp_int *p);
//点乘
bool Ecc_points_mul(mp_int *qxmp_int *qy mp_int *px mp_int *pymp_int *dmp_int *amp_int *p);
//点加
int Two_points_add(mp_int *x1mp_int *y1mp_int *x2mp_int *y2mp_int *x3mp_int *y3mp_int *abool zeromp_int *p);
//二进制存储密文
int chmistore(mp_int *aFILE *fp);
//把读取的字符存入mp_int型数
int putin(mp_int *achar *chint chlong);
//ECC加密
void Ecc_encipher(mp_int *qxmp_int *qy mp_int *px mp_int *pymp_int *amp_int *p);
//ECC解密
void Ecc_decipher(mp_int *k mp_int *amp_int *p);
//实现将mp_int数a中的比特串还原为字符串并赋给字符串ch:
int chdraw(mp_int *achar *ch);
//取密文
int miwendraw(mp_int *achar *chint chlong);
unsigned int SDBMHash16(char *str);//对输入的字符串计算Hash值,输出为一个32位的整数
//CString IntToString(int& number);//将一个整数转换为一个字符串
unsigned int SDBMHash32(char *str);
void NumToStr(unsigned __int64 achar z[100]);
void Hashstring(char temphash[800]unsigned __int64 *hashint n1);
int myrng(unsigned char *dst int len void *dat)
{
int x;
for (x = 0; x < len; x++) dst[x] = rand() & 0xFF;
return len;
}
void main(){
cout<<“\n---------------------------------------------------“;
cout<<“\n 本程序实现SM2的加密解密“;
cout<<“\n---------------------------------------------------\n“<
clock_t t_startt_end; //统计时间
mp_int GX;
mp_int GY;
mp_int K;//私有密钥
mp_int A;
mp_int B;
mp_int QX;
mp_int QY;
mp_int P;//Fp中的p(有限域P)
mp_int c1xc1y;
mp_int c2xc2y;
mp_int r;
mp_int tempxtempy;
//mp_int m;//随机待加密明文
mp_int temp1;
//mp_int mx;
mp_init(&GX);
mp_init(&GY);
mp_init(&K);
mp_init(&A);
mp_init(&B);
mp_init(&QX);
mp_init(&QY);
mp_init(&P);
mp_init(&c1x);
mp_init(&c1y);
mp_init(&c2x);
mp_init(&c2y);
mp_init(&r);
mp_init(&tempx);
mp_init(&tempy);
//mp_init(&m);
mp_init(&temp1);
//mp_init(&mx);
FILE *fp*fq;
char fin_name[40]fout1_name[40]fout2_name[40];
unsigned __int64 buffer[20000];
char test[20000];
//short buffer[2000
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 54784 2017-01-18 16:27 my_ecc.opt
文件 756 2013-10-07 21:04 my_ecc.plg
文件 6443008 2019-09-21 14:42 my_ecc.sdf
文件 878 2019-09-21 14:39 my_ecc.sln
..A..H. 10752 2019-09-21 14:42 my_ecc.suo
文件 6174 2019-09-21 14:37 my_ecc.vcxproj
文件 143 2019-09-21 14:37 my_ecc.vcxproj.user
文件 16673 2013-10-07 18:07 tommath.h
文件 19875 2013-10-07 18:07 tommath_class.h
文件 2184 2013-10-07 18:07 tommath_superclass.h
文件 870 2019-09-21 14:42 Debug\cl.command.1.tlog
文件 10534 2019-09-21 14:42 Debug\CL.read.1.tlog
文件 370 2019-09-21 14:42 Debug\CL.write.1.tlog
文件 123904 2013-10-07 18:07 Debug\my_ecc.bsc
文件 299111 2013-10-07 21:04 Debug\my_ecc.exe
文件 367240 2013-10-07 21:04 Debug\my_ecc.ilk
文件 218 2019-09-21 14:42 Debug\my_ecc.lastbuildstate
文件 1431 2019-09-21 14:42 Debug\my_ecc.log
文件 0 2019-09-21 14:42 Debug\my_ecc.unsuccessfulbuild
文件 713 2019-09-21 14:39 Debug\my_ecc.vcxprojResolveAssemblyReference.cache
文件 0 2019-09-21 14:39 Debug\my_ecc.write.1.tlog
文件 27648 2019-09-21 14:42 Debug\vc100.idb
文件 45056 2019-09-21 14:42 Debug\vc100.pdb
文件 82944 2013-10-07 21:04 Debug\vc60.idb
文件 61440 2013-10-07 21:04 Debug\vc60.pdb
文件 15794176 2019-09-21 14:40 ipch\my_ecc-aa5eaec4\my_ecc-12fc0fa6.ipch
文件 155136 2013-10-07 18:07 ecc.lib
文件 369776 2013-10-07 18:07 MathLib.lib
文件 27987 2019-09-21 14:42 my_ecc.cpp
文件 3445 2013-10-07 18:07 my_ecc.dsp
............此处省略8个文件信息
- 上一篇:剑灵辅助源码
- 下一篇:VoIP高质量音视频传输技术研究
相关资源
- 3des加密算法C语言实现
- DES加密算法C语言实现
- C语言实现的DES对称加密算法
- 国密SM4加密_2020
- C++ SHA256加密计算
- BlowFish加密算法
-
STM32-ba
se64加密源代码 - VProtect+注册机.rar
- VC++实现RSA加密算法
- dsp课程设计——语音加密.zip
- C++实现RSA加密解密算法
- 多表代换 加密解密 C语言实现
- 椭圆曲线ECC加密解密算法的c语言实现
- hill密码的加密、解密以及破译.zip
- C++实现AES、DES加密算法含MFC界面
- 3DES加密算法C++实现
- DES/3DES算法C语言实现
- DES和3DES加密算法,C语言,适用于单片
- 各种加密算法C语言版
- SM4(ECB、CBC、CTR、CFB、OFB)加密算法
- RSA算法纯C语言代码实现,带测试dem
- DES算法C++实现.rar
- OpenSSL RSA 非对称加密(VS2013,C++实现
- DES文件加密解密系统 密码学课设
- AES 加密 C++源码
- c语言+UDP+DES加密+socket编程
- 用vc++实现文件加密功能的源代码
- stm32L系列F系列 加密库Cryptographic lib
- 基于混沌算法的图像加密系统C++源码
- C++编写的数据加密程序源代码6个
评论
共有 条评论