首页 > 其他分享 >RSA乱记

RSA乱记

时间:2023-08-08 20:35:59浏览次数:32  
标签:乱记 phi gmpy2 RSA 明文 import n1 mod

加密

\(y=x^e\mod n\)

其中\(x\)是明文,\(e\)是在\((1,m)\)中随机选取的一个数(常选\(65537\)),但是要满足\(gcd(m,e)=1\)

\(n\)是由随机选取的两个很大的质数\(p,q\)相乘得到的

解密

我们考虑如何根据密文等到明文

\(x=y^d\mod n\)

其中\(d\)是\(inv(e\mod phi(n))\)

这样根据\(y\)和\(e\)还有\(n\)我们就能求出明文了

phi=(p-1)*(q-1)#p,q是对n做质因子分解得到的
d=invert(e,phi)
ans=pow(c,d,n)#表示c^d mod n  c是明文 ans就是密文了

这里讲如何分解这种很大的质数,一种是利用网站factordb,或者是用yafu工具

cmd   yafu-x64 factor(n)

\(gmpy2\)是自带求欧拉函数的

eular_phi(n)

当\(n\)很大\(e\)很小时?

考虑\(x=\sqrt[3]{y+k*n}\)这个式子

我们枚举\(k\)来验证开根出来的是否为整数即可,是整数就代表我们找到了\(x\)

from gmpy2 import *
e = 3
n = big
c = big
k = 0
while 1:
	res = iroot(c+k*n,e)#开高次根号,返回值的第一个表示开出的数,第二个true/false表示是否是整数
	if(res[1] == True):
	print(long_to_bytes(int(res[0])))
	break
	k = k + 1

当\(n\)很大但有两套\(n,e,y\)时?

一般可以求两个\(n\)的\(gcd\)然后对\(n\)做质因数分解,剩下的流程一样

import gmpy2
import binascii
e = 65537
n1 =big1
c1 =big2
n2 =big3
c2 =big4
p = gmpy2.gcd(n1,n2) # 欧几里得算法
q = n1 // p
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = gmpy2.powmod(c1,d,n1)
print(binascii.unhexlify(hex(m)[2:]))
#hex()转为16进制
#unhexlify将16进制转为2进制

***\(n\)很大,但是有两个相同的\(n\),\(e,c\)不同?

共模攻击

\(c1 = m^e1 \mod n\)

\(c2 = m^e2 \mod n\)

还没看懂咋做。

标签:乱记,phi,gmpy2,RSA,明文,import,n1,mod
From: https://www.cnblogs.com/master-lio/p/17615296.html

相关文章

  • 对称加密乱记
    块密码mt19937困难的,难逆向的,脚本小子的。RC4fromCryptodome.CipherimportARC4defencrypt(key,data):cipher=ARC4.new(key)returncipher.encrypt(data)defdecrypt(key,data):cipher=ARC4.new(key)returncipher.decrypt(data)key=b'......
  • 论文解读(Moka‑ADA)《Moka‑ADA: adversarial domain adaptation with model‑orient
     Note:[wechat:Y466551|可加勿骚扰,付费咨询]论文信息论文标题:Moka‑ADA:adversarialdomainadaptation withmodel‑orientedknowledgeadaptation forcross‑domainsentimentanalysis论文作者:MaoyuanZhangXiangLiFeiWu论文来源:2023aRxiv论文地址:download 论......
  • RSA的私钥和公钥
    RSA的公钥和私钥在F(N)上互为逆元,F(N)为模N的欧拉函数。模N为素数时,F(N)=N-1模N为两素数p和q乘积时,F(N)=(q-1)(p-1)模N为多个素数x1、x2……xn乘积时,F(N)=(x1-1)(x2-1)……(xn-1)一个数E在N上有逆元的充分必要条件是gcd(E,N)=1。故在选取公钥E时,需要保证E和欧拉函数F(N)互......
  • JavaScript学习 -- RSA算法应用实例及公钥私钥的生成方法
    正文:RSA算法是一种非对称加密算法,用于加密、解密和数字签名等场景。本文将介绍如何在JavaScript中使用RSA算法,并提供一个实际的案例,同时也会说明如何生成公钥和私钥。首先,确保您已经引入了jsencrypt库。以下是一个使用RSA算法进行加密和解密的示例,同时也包含了公钥和私钥的生成方法......
  • C# RSA加密
    RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();byte[]cipherbytes;RsaKeyParameterspublickeyParam=(RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(spk));//spk为公钥stringXML=string.Format("<RSAKeyValue>&......
  • Pixelmator Pro 3.3.10 Mosaic (macOS Universal) - 专业图像编辑工具
    PixelmatorPro3.3.10Mosaic(macOSUniversal)-专业图像编辑工具请访问原文链接:https://sysin.org/blog/pixelmator-pro-3/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgPixelmatorPro真正基于AppleMac技术构建,不像某些异类(A3和奥多比)写个文档和做个图都......
  • Asp.Net Core 集成JWT采用Rsa非对称密钥并实现自定义身份验证
    授权和鉴权分为了两个项目。首先是授权:建立Asp.netcore项目,并在Nuget包安装System.IdentityModel.Tokens.Jwt新建一个WebApi用于登录,这里使用账户密码方便调试。另外BaseResult是我封装的一个统一返回数据类型。需要注意的是audience以及JwtRegisteredClaimNames.Name......
  • .net通用RSA加密工具类
    目前最流行的加密算法莫过于RSA了,以下是我们.net/.netcoreC#生成环境用的RSA加密工具类,在此分享给大家。usingSystem;usingSystem.IO;usingSystem.Security.Cryptography;usingSystem.Text;namespaceCommon{///<summary>///RSA加密工具类///</su......
  • RSA加密的基本常识和封装类
    RSA加密的基本常识和封装类RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于数据加密、数字签名和密钥交换等领域。在RSA加密封装中,主要涉及生成密钥对、加密和解密的过程。一、RSA加密封装的过程1.生成密钥对:RSA算法使用一对密钥,包括公钥和私钥。公钥用于加密数据,......
  • AI面试官:MD5、DES、RSA、AES加密
    AI面试官:MD5、DES、RSA、AES加密目录AI面试官:MD5、DES、RSA、AES加密1.什么是MD5加密?它在实际应用中有哪些场景?2.DES加密是什么?它在现实中的应用场景有哪些?3.问题:RSA加密是什么?它在实际应用中的场景有哪些?4.AES加密是什么?它在现实生活中有哪些应用场景?5.请比较MD5、DES、RSA......