RSA破解作業(yè)

算法思想:

加密過程:c=M^e mod N。解密過程:M=c^d mod N觅丰。取c1=2^e mod N盖腕,將c和c1作為dec(*c)的參數,此時(c*c1)^d mod N=(2M)^(e*d) mod N并巍,又M^(e*d) mod n=M目木,那么(c*c1)^d mod N=2M。最后得到的2M還要判斷是否大于N懊渡。

代碼使用了大數gmp庫刽射。其中,所有大數都用mpz類型存儲剃执,用mpz_init_set_str(N,N_str,10)將字符串轉為mpz類型誓禁。此外,2^e mod N可用mpz_powm(c1,M,e,N)肾档;(c*c1)mod N可先用mpz_mul(ans,c,c1),后用mpz_mod(ans,ans,N)摹恰;判斷是2M否大于N可用mpz_cmp(x,N)。

主要代碼:

#include

#include

#include "dec.h"

using namespace std;

const char* N_str = "10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531469002933770824382865926730400902798743137187335810705309884635534159797732259520594337385186897629868362414475309001507719259272508669419676508606630823351242964205044695669333236417591";

const char* e_str = "10335071977839588495324343307012721241868030345867699233451500809021555989403028103743221782417440900848403102247012012875905268518785845678756696925714007988778268752026049276281025329038071087021446834856566687537729918372863729292015978809506607411711073716898691660211835403800810547133032654209857";

const char *c_star_s = "775789568255447714013247918834475198679653917741675336925599335265205597974556878796619688391490153400553690715156825186410083467239441867930362368759072824742512821423959166270736914130604102452801162684877374802075310241079026986641176079329871431448404341153307957496668749957011118721172866996397";

const char *m_text_s = "2";

mpz_t ans;

/*

//用于(a*b)mod c怒见,后來發(fā)現可以直接用gmp庫的乘法和取模函數得到結果俗慈。

void q_mul(mpz_t a,mpz_t b, mpz_t c){

mpz_init(ans);//初始化為0

mpz_t k;

mpz_init(k);

while(mpz_cmp_ui(b,0)){//判斷b是否大于0

mpz_mod_ui(k,b,2);

if(mpz_cmp_ui(k,0)){//判斷b&1是否大于0

mpz_sub_ui(b,b,1);//b減1

mpz_add(ans,ans,a);//ans=ans+a

mpz_mod(ans,ans,c);//ans=ans%c

}

mpz_cdiv_q_ui(b,b,2);//b=b/2

mpz_add(a,a,a);//a=a+a

mpz_mod(a,a,c);//a=a%c

}

}

*/

//g++ dec_rsa.cpp -o dec_rsa dec.o -lgmp

int main()

{

mpz_t N;

mpz_init_set_str(N,N_str,10);//將字符串N_str以十進制存儲到N

mpz_t e;

mpz_init_set_str(e,e_str,10);//將字符串e_str以十進制存儲到e

mpz_t c;

mpz_init_set_str(c,c_star_s,10);//將字符串c_star_s以十進制存儲到c

mpz_t M;

mpz_init_set_str(M,m_text_s,10);//將字符串m_text_s以十進制存儲到M

mpz_t c1;

mpz_init(c1);

mpz_powm(c1,M,e,N);//將c1賦值為(2^e)modN

mpz_mul(ans,c,c1);//ans=c*c1

mpz_mod(ans,ans,N);//ans=ans%N

mpz_t x;

mpz_init(x);

char *m = dec(ans); //access the dec oracle

mpz_init_set_str(x,m,10);//m為ans的解密結果,將字符串m以十進制存儲到x

if(mpz_cmp(x,N)==1)

cout<<"error!"<

else{

mpz_cdiv_q_ui(x,x,2);//x=x/2

gmp_printf("%Zd\n",x);//輸出x

}

return 0;

}

運行結果:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市遣耍,隨后出現的幾起案子闺阱,更是在濱河造成了極大的恐慌,老刑警劉巖舵变,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異面睛,居然都是意外死亡辟宗,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門扛或,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亿絮,你說我怎么就攤上這事告喊。” “怎么了派昧?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵黔姜,是天一觀的道長。 經常有香客問我蒂萎,道長秆吵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任五慈,我火速辦了婚禮纳寂,結果婚禮上,老公的妹妹穿的比我還像新娘泻拦。我一直安慰自己毙芜,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布争拐。 她就那樣靜靜地躺著腋粥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪架曹。 梳的紋絲不亂的頭發(fā)上隘冲,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音绑雄,去河邊找鬼展辞。 笑死,一個胖子當著我的面吹牛万牺,可吹牛的內容都是我干的罗珍。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼杏愤,長吁一口氣:“原來是場噩夢啊……” “哼靡砌!你這毒婦竟也來了?” 一聲冷哼從身側響起珊楼,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤通殃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體画舌,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡堕担,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了曲聂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霹购。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖朋腋,靈堂內的尸體忽然破棺而出齐疙,到底是詐尸還是另有隱情,我是刑警寧澤旭咽,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布贞奋,位于F島的核電站,受9級特大地震影響穷绵,放射性物質發(fā)生泄漏轿塔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一仲墨、第九天 我趴在偏房一處隱蔽的房頂上張望勾缭。 院中可真熱鬧,春花似錦目养、人聲如沸俩由。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽采驻。三九已至,卻和暖如春匈勋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膳叨。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工洽洁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人菲嘴。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓饿自,卻偏偏與公主長得像,于是被迫代替她去往敵國和親龄坪。 傳聞我的和親對象是個殘疾皇子昭雌,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容