基于ECC(椭圆曲线加密)与RSA的文件加密,算法C++实现

本文章来源于一次作业,提交于2019年6月,如果老师看到,请勿误认为作业抄袭

代码下载链接

https://download.csdn.net/download/anying0/11264650

软件基本功能介绍

ECC与RSA都是非对称加密算法,会生成不同的公钥和私钥,适合用于文件的加密传输与解密。因此,在此设计一个文件的加密解密系统。由于椭圆曲线需要选择一套复杂的参数,RSA中需要选取两个较大的质数,应该给予用户自定义这些加密参数的功能。考虑文件的加密解密过程难以验证其正确性,因此需要给ECC、RSA以及ECC-RSA串联系统都增设测试功能,可以对不同功能模块进行单元测试,验证算法的有效性。
综上所述,软件的主要功能定位为文件的ECC-RSA串联加密与解密。可选择功能为RSA算法与ECC算法的参数选择功能。附加测试功能为ECC算法、RSA算法以及ECC-RSA串联算法的单元测试功能。

软件设计

整体架构设计

本文设计的加解密系统通过一个流程控制程序来控制系统整体的流程,并完成与用户的交互,根据第一章节分析的需求以正确的逻辑形成功能。整个系统架构的流程设计如图1所示:
在这里插入图片描述
图1 非对称加解密系统框图
其中可以看到,系统架构从整体上分为五种运行模式,分别是ECC测试模式,RSA测试模式,ECC-RSA测试模型,文件加密模式以及文件解密模式。对于ECC测试模式、RSA测试模式以及ECC-RSA测试模式,程序流程是相似的,先设定加密算法的参数,再输入测试用例。程序对测试用例进行自动的先加密后解密,然后显示程序运行结果,从而判断算法的有效性。
对于文件加密流程,先输入加密算法的参数,然后读取需要加密的文件,利用ECC-RSA串联流程对文件进行加密,并且覆盖原文件。对于文件解密流程则正好相反,选择ECC-RSA的参数后,读取文件,进行RSA-ECC的串联流程解密,最终得到明文文件。

系统加密解密参数的设置流程

系统中关于选择RSA参数与ESA参数的部分,各自有两种模式。一种是直接使用系统的默认参数,好处为简单稳定,一定可以进行有效的加密。另一种是通过手动输入加密参数,加密参数需要自行验证后填入,如果填入错误的参数将无法进行正常的加密与解密。参数的设定思路以流程图表示。其中,RSA的参数设置如图2所示,ECC的参数设置流程如图3所示:
在这里插入图片描述
图2 RSA参数设置流程
在这里插入图片描述
图3 ECC加密参数设置流程

ECC(椭圆曲线加密)的加密解密原理及其实现

ECC模块架构

ECC模型使用CPP封装成为一个类。ECC模型主要包含的功能有:设置ECC参数、计算私钥、计算公钥以及加密、解密。ECC模型可以调用的函数如下所示:

void setEllipticParameter(long long int kSet,long long int aSet,long long int bSet,long long int pSet,long long int rSet);
    //上方函数设置椭圆的相关参数,a与b为椭圆曲线y^2 = x ^ 3 +a*  x + b的参数。
    //p为一个素数是素域的范围,满足0<a<p,0<b<p,0<k<p,0<r<p
    //密文C1=r*A,密文C2也与r有关。
    //其中k相当于私钥信息
    //先选定素域x<p,曲线参数A与B,然后得到一个曲线上的基点A(x,y),然后得到基点上的阶K,选择k<K,然后设置一个随机的r<k
    void calKey(long long int x,long long int y);//计算公钥,设置基钥A的坐标,B可以根据设置的私钥自动解算
    twopoint getPublicKey();//获取公钥,这个函数得到的是可以公开的秘钥
    void getPrivateKey(long long int &ko);//获取私钥
    long long int getP();//获取素域范围P
    void encode(char *in, char *out,long long int length,twopoint publicKey);//对字符串进行加密,长度参数为明文长度
    void decode(char *in,char *out,long long int length,long long int kKey);//对字符串进行解密,长度参数为密文长度

ECC加密解密原理

本文设计的ECC模型基于ElGamal公钥密码体制,所以下面着重进行ElGamal体制的算法描述:
1)设 p p p为一个素数, E E E是有限素域 Z p Z_p Zp上的椭圆曲线, α ∈ E \alpha\in E αE是椭圆曲线上的一个点,并且阶足够大,使得生成的离散对数问题是难解的。 p , E , α p,E,\alpha p,E,α都是公开的。
2)随机选取整数 d ( 0 < = d < o r d ( α ) ) d(0<=d<ord(\alpha)) d(0<=d<ord(α)),计算 β = d α \beta=d^\alpha β=dα。其中 β \beta β是公钥, d d d是私钥。
3)加密时,若明文为 X = ( x 1 , x 2 ) X=(x_1,x_2) X=(x1,x

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值