资源简介
在QT环境下完成,不过可以轻易改成VC编译,因为使用的是纯C++
只引用了iostream,十分干净,轻松编译
适合初学者学习

代码片段和文件信息
#include “ecc.h“
long long int ecc::getMIM(long long int x long long int mod)//参考https://baike.baidu.com/item/乘法逆元/5831857?fr=aladdin
{
long long int QX1X2X3Y1Y2Y3T1T2T3;
X1 = 1;
X2 = 0;
X3 = mod;
Y1 = 0;
Y2 = 1;
Y3 = (x%mod + mod) %mod;//获得正整数
while(Y3 != 1){
if(Y3 == 0)
{
//cout<<“wrong MIM!“< throw 25112;
}
Q = X3 / Y3;
T1 = X1 - Q * Y1;
T2 = X2 - Q * Y2;
T3 = X3 - Q * Y3;
X1 = Y1;
X2 = Y2;
X3 = Y3;
Y1 = T1;
Y2 = T2;
Y3 = T3;
}
return Y2;
}
point ecc::add(point pa point pb)//素域加法,相关可以查资料
{
long long int kk;
if(isEqual(papb))
kk = ((3 * pa.x * pa.x + a) * getMIM(2* pa.y p)) % p ;
//必须使用正整数。这里pa.y的值不能取0.当取0时,这就不能进行这个计算了,因为 pa = -pb了,则,应该进行一个判断。但是,这样的结果是 O,是不在椭圆曲线上的,不能进行输出的值。这里是有一个周期数在,对于容易一个基值的也就是先给出的A来说,它有一个周期n,使nA = O,而这里所有参数的选取值都小于n,使其不会达到O,保证了不会出错。
else
kk = (pb.y - pa.y) * getMIM(pb.x - pa.x p) %p;
point c;
c.x = (kk*kk - pa.x -pb.x) %p;
c.y = (kk * (pa.x - c.x) - pa.y)%p ;
c.x = (c.x + p) %p;
c.y = (c.y + p) %p;
return c;
}
point ecc::mul(point b long long int n)//就是执行N遍素域加法
{
point q = b;
n = n -1;
for(long long int i = 1 ; i < n;i++){
q = add(qb) ;
}
return q;
}
bool ecc::isEqual(point pa point pb)
{
return pa.x == pb.x && pa.y == pb.y;
}
point ecc::DCodePoint(twopoint t long long int kKey)//ElGamal的标准解密算法,使用私钥k才可以解密
{
//cout< point Z = mul(t.firstkKey);
point c1k;
c1k.x = Z.x;
c1k.y = p-Z.y;
point m;
m = add(c1kt.second);
return m;
}
twopoint ecc::ECodePoint(point m twopoint publicKey)//ElGamal的标准加密算法用公钥A,B加密
{
point c1c2;
c1 = mul(publicKey.firstr) ;
point Y = mul(publicKey.secondr) ;
c2 = add(mY);
return twopoint(c1c2);
}
ecc::ecc()
{
}
void ecc::setEllipticParameter(long long int kSet long long int aSet long long int bSet long long int pSet long long int rSet)
{
k = kSet;
a = aSet;
b = bSet;
p = pSet;
r = rSet;
}
void ecc::calKey(long long int x long long int y)
{
A.x = x;
A.y = y;
B = mul(Ak);
}
void ecc::encode(char *in char *out long long int length twopoint publicKey)
{
point M;
twopoint C;
for(long long int i =0; i < length;i++)
{
M.x = i+rand()%10;
M.y = in[i];
C = ECodePoint(MpublicKey);
out[i*4+0] = (char)C.first.x;
out[i*4+1] = (char)C.first.y;
out[i*4+2] = (char)C.second.x;
out[i*4+3] = (char)C.second.y;
}
}
void ecc::decode(char *in char *out long long int length long long int kKey)
{
point M;
twopoint C;
if(length%4 != 0)
{
cout<<“密文长度不是4的倍数,不合法。“<
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-06-26 02:02 ECCRSA\
文件 3810 2019-06-26 02:01 ECCRSA\ecc.cpp
文件 1993 2019-06-24 15:11 ECCRSA\ecc.h
文件 181 2019-06-23 02:57 ECCRSA\ECCRSA.pro
文件 24006 2019-06-26 02:02 ECCRSA\ECCRSA.pro.user
文件 11339 2019-06-25 03:19 ECCRSA\main.cpp
文件 1570 2019-06-23 22:37 ECCRSA\rsa.cpp
文件 1046 2019-06-24 15:11 ECCRSA\rsa.h
相关资源
- VC++实现RSA加密算法
- C++实现RSA加密解密算法
- 椭圆曲线ECC加密解密算法的c语言实现
- c++实现ECC加解密
- 生成RSA密钥对
- RSA算法纯C语言代码实现,带测试dem
- OpenSSL RSA 非对称加密(VS2013,C++实现
- MFC实现RSA算法
- 数字签名算法,c++实现,RSA的算法
- 基于OpenSSL的RSA加解密的C语言实现
- RSA加密算法用MFC实现
- rsa数字签名
- C++使用Openssl进行RSA加密解密及签名验
- c++实现ecc加解密算法
- RSA算法加密MFC实现
- RSA加密算法
- Hash散列函数与RSA实现数字签名
- MFC vc6.0 RSA DES MD5 加密解密算法
- 作业4 RSA和大数因式分解
- RSA论文
- RSA加密算法C语言实现
- 最简单rsa加解密文件
- RSA加密字符串 C++ Builder 6.0
- 密码学RSA 算法源码及大数运算的实现
- RSA(C++)代码实现全
- RSA加解密源码VC++实现
- RSA算法C语言程序
- C++ 超大整数类 及RSA加密
- openssl c语言应用
- RSA加密算法c语言
评论
共有 条评论