crypto
RAS算法
非对称加密算法RSA密匙生成步骤
选择两个质数 p , q
计算 n , n = p*q
计算欧拉函数值 φ(pq) = (p-1)*(q-1)
选择整数 e ,要求满足 1 < e < φ(pq)
计算 d ,要求满足 ed ≡ 1 mod φ(pq) 也就是 ed mod φ(pq) = 1
保存密匙对
攻防世界例题:
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d
已知 p, q 可得n=2135733555619387051
通过脚本即可得d=125631357777427553
脚本如下
# 分解模数n
def rsa_moder(n):
base = 2
while base < n:
if n % base == 0:
return base, n // base
base += 1
# 求欧拉函数f(n)
def rsa_get_euler(prime1, prime2):
return (prime1 - 1) * (prime2 - 1)
# 求私钥
def rsa_get_key(e, euler):
k = 1
while True:
if (((euler * k) + 1) % e) == 0:
return (euler * k + 1) // e
k += 1
# 根据n,e计算d(或根据n,d计算e)
def get_rsa_e_d(n, e=None, d=None):
if e is None and d is None:
return
arg = e
if arg is None:
arg = d
primes = rsa_moder(n)
p = primes[0]
q = primes[1]
d = rsa_get_key(arg, rsa_get_euler(p, q))
return d
def test():
str_fmt = 'n: {:<10} e: {:<10} d: {:<10}'
# 导入rsa库
import rsa as rsa
key = rsa.newkeys(24)
# 产生rsa密钥对
if isinstance(key[1], rsa.PrivateKey):
print(str_fmt.format(key[1].n, key[1].e, key[1].d))
# 解密
n = 14666299
d = 2101153
e = get_rsa_e_d(n, None, d)
print(str_fmt.format(n, e, d))
n = 12748507
e = 65537
d = get_rsa_e_d(n, e, None)
print(str_fmt.format(n, e, d))
if __name__ == '__main__':
test()
#来自https://www.cnblogs.com/baigoogledu/p/9858091.html
PCY文件
pcy转py:python反编译 - 在线工具https://tool.lu/pyc/
幂数加密
百科内容:二进制幂数加密
二进制幂数加密法,由于英文字母只有26个字母。只要2的0、1、2、3、4、5次幂就可以表示31个单元。通过用二进制幂数表示字母序号数来加密。
由于4=2^2 所以D加密过之后是2;15=2^0+2^1+2^2+2^3所以O加密后是0123(4与15为字母在字母表中的排序)
攻防世界例题:8842101220480224404014224202480122(根据题干提示可以得知需分为八位)
88421 0122 048 02244 04 0142242 0248 0122
试了试没有二进制加密那么麻烦 因为第一串数字开头不为零 仅仅是将分隔开的数字相加 所得即为在字母中的排序
得到flag:23 5 12 12 4 15 14 5
W E L L D O N E
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探