91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 9KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-21
  • 語言: C/C++
  • 標簽: ECC??RSA??C++??教學??

資源簡介

在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?????????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?????{
????????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

評論

共有 條評論