【发布时间】:2021-12-21 10:20:44
【问题描述】:
我想使用中间相遇攻击来暴力破解 64 位 RSA 加密文本(这是针对大学的,没有恶意)。
为此,我基本上创建了一个具有 2^34 个 BigInt 值的 Julia 向量,并在其上广播 powermod() 方法以将值替换为结果。
v = powermod.(collect(1:2^34), e, n)
n 在这种情况下是 1024 位长,理论上应该导致 2^34 * 1024 位大小加上开销的向量。但是,如果我尝试创建一个较小的向量(例如 2^20),它已经分配了 4GB 的内存。
const e = 65537
const n = 146524179203462820907751077702895222709717245613911342138636679265720963659264803540209990978140003809112749926543448691815554807130673470903067642157383639213843567573216381956709789503739105865173848988830139432801516289108538638198344024523424071181688467967187076534718264943427915623567859427045475866239
@time begin
v = (powermod.(collect(1:2^24), e, n))
end
@time 的输出:
125.598926 seconds (117.44 M allocations: 4.000 GiB, 5.35% gc time)
不确定我在这里做错了什么以及是否做错了什么。任何帮助将不胜感激..
【问题讨论】:
-
你为什么
collecting这个范围? Julia 完全有能力迭代 range 对象而不将其分配到向量中。 -
请提供一个 MWE,包括打印发布结果的
@time行,您的代码甚至不会运行,因为e和n未定义。您在哪里创建BigInt数组并不明显。 -
@NilsGudat 感谢您指出这一点。但是,这只会将分配的内存减少到
3.875 GiB -
@BatWannaBe 我编辑了帖子以提供 MWE。这将需要一些时间来执行,但您可以将 24 减少到更小的数字以进行测试。
标签: arrays memory vector julia