西普CTF-rsarsa

2017-09-07 2,043 18
# RSA原理参考链接:http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
# -*- coding:utf8 -*-
# Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32
import gmpy2

p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483L
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407L
e = 65537L
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034L
phi = (p - 1) * (q - 1)
# 计算得到私钥(n, d)
d = long(gmpy2.invert(e, phi))
n = p * q
# 计算并输出c^d mod n
print pow(c, d, n) 

C#版:

void Button1Click(object sender, EventArgs e)
{
	string p = "9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483";
	string q = "11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407";
	BigInteger pInteger = BigInteger.Parse(p);
	BigInteger qInteger = BigInteger.Parse(q);
	BigInteger nInteger = (pInteger - 1) * (qInteger - 1);
	BigInteger eInteger = 65537;
	
	List<BigInteger> elist = new List<BigInteger>();
	List<BigInteger> nlist = new List<BigInteger>();
	elist.Add(eInteger);
	nlist.Add(nInteger);
	//辗转相除法
	while(eInteger != 1){
		nInteger = nInteger % eInteger;
		elist.Add(eInteger);
		nlist.Add(nInteger);
		eInteger = eInteger % nInteger;
		elist.Add(eInteger);
		nlist.Add(nInteger);
	}
	BigInteger dInteger = 1;
	BigInteger kInteger = 0;
	for(int i = elist.Count - 2; i >= 0; i = i - 2){
		kInteger = (elist[i] * dInteger - 1) / nlist[i];
		dInteger = (nlist[i - 1] * kInteger + 1) / elist[i - 1];
	}
	//MessageBox.Show(dInteger * elist[0] % nlist[0] + "");
	textBox1.Text += dInteger + "\r\n\r\n";
	
	string c = "83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034";
	BigInteger cInteger = BigInteger.Parse(c);
	
	textBox1.Text += (runFermatPow(cInteger, dInteger, pInteger * qInteger) + "");
}

BigInteger runFermatPow(BigInteger a, BigInteger b, BigInteger m){
	BigInteger result = 1;
	while (b > 0) {
		if ((b & 1) == 1)
		result = (result * a) % m;
		
		a = (a * a) % m;
		b >>= 1;
	}
	return result;
}

Flag:

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

小广告:关于获取西普实验吧所有Writeup请点击这里查看索引

查看所有Flag需要付费,需要获取所有Flag的童鞋请访问这里成为付费用户,可以自助把自己的注册邮箱加入网站白名单,即可免回复看到本站所有Flag

Flag大全地址:所有Flag

PS:本站不是实验吧的官方站点,纯粹是个人博客,收取Flag费用仅是维持服务器费用,做站不易,且行窃珍惜,如果喜欢我的博客,愿意捐赠的,可以扫描下面的二维码

微信二维码:
支付宝二维码:
打赏
  • 打赏支付宝扫一扫
  • 打赏微信扫一扫

猜你喜欢

全部评论:18条

加载中...
  1. re13orn 2018-11-15 09:39

    听说回复可以看到弗拉格耶 :shock:

  2. chichichi 2018-10-14 02:59

    看看

  3. 1506913033 2018-06-12 04:47

    。。。。呃

  4. 159379081 2018-06-04 23:21

    这种

  5. 1694573044 2018-03-28 12:57

    回复看看

  6. vim 2018-01-04 13:18

    回复看看 :mrgreen:

  7. Azz 2017-12-26 22:55

    感谢分享~

  8. a80658483 2017-11-02 00:02

    谢谢楼主

  9. cjain 2017-10-25 11:00

    saf ss到达

  10. MrR0b0t 2017-10-23 21:19

    谢谢楼主

  11. 0000 2017-10-17 21:23

    我要flag

  12. ad 2017-10-17 08:54

    为什么看不了

  13. 123 2017-09-25 11:35

    flag我来了

  14. fb 2017-09-23 11:39

    flag我来了

  15. 花丛 2017-09-17 13:09

    看FLAG

  16. 琥珀1993 2017-09-17 09:44

    看不了

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号