问个问题, Java 有没有办法接入 gpu 运算,想写个暴力破解压缩包

2020-01-19 09:43:39 +08:00
 zzzmh

如题,就是写了自己玩玩的那种不开源不发布不盈利的 大概思路就是用 java 读 rar、zip、7z 等 从 0 开始逐个测试密码 密码不对就接着试的那种 如果只是开多线程用 cpu 算的话,感觉效率太低

早些年我接触过一个毛子大神写的 wifi 密码握手包的破解器 是用 gpu 运算的,算力贼强

迫于自身实力有限,就只会 java 一门后端语言 想问问有没有 java 调用 gpu 来运算的可能性? 如果需要再学 python 的话就算了。。。

10218 次点击
所在节点    Java
73 条回复
find
2020-01-19 09:48:28 +08:00
肯定可以啊,jni 你不知道? python 也是去 call c
hsddszjs
2020-01-19 09:52:35 +08:00
augustheart
2020-01-19 09:53:15 +08:00
当然可以,想怎么搞就怎么搞。不过老实说暴力破解一点玩头都没有,毫无技术含量。
lihongjie0209
2020-01-19 09:56:05 +08:00
我觉得你的思路跑偏了.

暴力破解属于 IO 密集型任务, 读取文件是主要耗时, 你所谓的算力在暴力破解中只是一个 for 循环的事情用来生成下一个密码.

我们可以假设一个极端的情况, 你提前生成好了 6 位密码的所有可能排列, 那么是不是说你就知道密码是什么了? 当然不是, 你必须把文件打开, 然后测试你生成的密码. 所以暴力破解文件密码不存在任何算力瓶颈.
franklinray
2020-01-19 10:00:13 +08:00
@lihongjie0209 楼主是想通过 GPU 来达到将整个 for 循环并行的目的吧。不过在尝试密码的时候不知道是不是需要读取文件,或者能不能通过其他方式进行密码的尝试
sunziren
2020-01-19 10:00:57 +08:00
@lihongjie0209 你给了楼主致命一击
augustheart
2020-01-19 10:08:38 +08:00
@lihongjie0209 并不需要每次都做文件操作的,至少 zip 是能够在内存中处理的。假如某个压缩包真的必须每次做文件操作,肯定是采取极端做法整个读入内存。
走 io 操作这种超级低效的方法正常写破解代码的都不会这么干
augustheart
2020-01-19 10:12:02 +08:00
@lihongjie0209 而且和你说的相反,暴力破解依赖的就是算力。
guyeu
2020-01-19 10:13:41 +08:00
纯 java 做不到。。只能 jni,GPU 相关的逻辑用 C 实现。
bagel
2020-01-19 10:15:13 +08:00
@sunziren 还致命一击。。楼上又暴露一堆不懂装懂的。暴力破解 AES 是典型的 CPU 密集任务,我只需要读取头一个 block ( AES 采用 16 字节 block ),就可以进行破解计算了,哪来的 IO ?
lihongjie0209
2020-01-19 10:16:25 +08:00
@augustheart #7 那么假设读取到内存之后测试密码耗时为 0, 那么程序的主要耗时是第一个读取文件到内存 + 生成 N 位字符串的排列.

假如我们需要破解一个 1GB 的压缩文件, 那么你需要的 IO 时间肯定是 ms 级别的, 但是循环的时间可能都不到 ms
bagel
2020-01-19 10:16:51 +08:00
为什么提 AES,因为 Zip 标准加密有两种方式,一种是 AES,一种是更弱鸡已不建议使用的 Zip 自己的加密算法。
lihongjie0209
2020-01-19 10:17:53 +08:00
@bagel #10 楼主的做法是 : 从 0 开始逐个测试密码 密码不对就接着试的那种, 不管你使用的是那种加密算法, 都当做黑盒破解
bagel
2020-01-19 10:18:45 +08:00
@lihongjie0209 #11 还在杠,多读点书,不懂装懂很好玩吗。
crystom
2020-01-19 10:18:50 +08:00
@lihongjie0209 很明显测试密码的耗时远大于生成排列
lihongjie0209
2020-01-19 10:19:37 +08:00
@bagel #14 眼睛不好去读题
lihongjie0209
2020-01-19 10:21:37 +08:00
@crystom #15 可能, 要看具体的压缩文件类型和库实现方式, 不过 IO 仍然是大头
iFlicker
2020-01-19 10:25:21 +08:00
jni 调 cuda api
bibitiger
2020-01-19 10:27:54 +08:00
如果只会 java 就放弃吧,jni 需要 c 或者 c++
msg7086
2020-01-19 10:29:17 +08:00
@bagel 你看看他的发帖历史就知道了,不懂装懂多久了都,吓得我赶紧 Block 了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/639055

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX