V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
3dwelcome
V2EX  ›  分享创造

写了一个纯浏览器计算 MD5 的工具

  •  
  •   3dwelcome · 2022-02-07 15:12:32 +08:00 · 3085 次点击
    这是一个创建于 813 天前的主题,其中的信息可能已经有所发展或是发生改变。
    尝试性用 JS 处理批量文件,没想到速度还挺快的。

    https://tool2d.com/#hashtool

    21 条回复    2022-02-14 15:55:36 +08:00
    3dwelcome
        1
    3dwelcome  
    OP
       2022-02-07 15:20:29 +08:00
    说一下为什么要加入 SHA384 这种奇怪的算法。

    是因为在 HTML 里,可以写成《 script type="text/javascript" src="file.js" integrity="sha384-7sS22HW0Ysm52kESvFEMf9indNH+3BYSMQzmC1FP57h2Ubwya50bu7FuHGa8N75D" crossorigin="anonymous"》《/script 》之类的。

    有 integrity 保护后,对于第三方不信任的 CDN ,就无法插入额外代码,确保 JS 资源 100%正确性。
    pengtdyd
        2
    pengtdyd  
       2022-02-07 15:25:34 +08:00
    学到一个新的知识点
    linglin0924
        3
    linglin0924  
       2022-02-07 15:26:17 +08:00
    这个交互,我还以为会上传我的文件到服务器呢,还是在我的本地浏览器里计算的。
    3dwelcome
        4
    3dwelcome  
    OP
       2022-02-07 15:31:10 +08:00
    @linglin0924 是的,上传提示是 chrome 给的,很容易被误导。
    duke807
        5
    duke807  
       2022-02-07 15:31:58 +08:00 via Android
    md5sum *
    一條命令就行不香嗎?
    zagfai
        6
    zagfai  
       2022-02-07 15:43:46 +08:00
    @duke807 这就是命令爱好者和 UI 爱好者的区别,我有个朋友和我持相反观点,我大部分操作都用命令,他没有 UI 他就不用。。。我们谁都没法说服谁。。
    gstqc
        7
    gstqc  
       2022-02-07 16:01:15 +08:00 via Android   ❤️ 1
    友情提醒一下楼主
    如果你截图的文件是私有的,并且同步到了百度云盘或者阿里云盘之类的,别人通过 md5 碰撞或者调用接口,是可以“秒传”你的文件的
    duke807
        8
    duke807  
       2022-02-07 16:15:54 +08:00 via Android
    @zagfai 我不是什麼命令行愛好者,怎麼方便怎麼來,雖然我用 linux 做主力系統十幾年,但是我寫代碼依然會首選 eclipse 、gedit 等圖形界面,而不是 vim emacs ,反感命令行的人估計都是用的 windows 系統:命令行沒有顏色、沒有補全、字體巨醜、不能自由改變窗口大小、又沒有好用的支持命令行的程序,換我也不會用命令行,所以這不是命令行的問題,這是 windows 系統的問題,當然 windows 也在改善,只不過永遠要比其它系統慢幾十年
    3dwelcome
        9
    3dwelcome  
    OP
       2022-02-07 16:20:25 +08:00
    @duke807 原来 md5sum 是 linux 下的命令,难怪我都没听说过。

    主要是这种程序 GUI 很简单,算法都是标准库,随手写两行 API ,功能就做完了。
    boris93
        10
    boris93  
       2022-02-07 16:41:28 +08:00 via iPhone
    @duke807 #8 其实就是不要搞这类无谓的党争,怎么舒服怎么来
    硬要说我也是命令行爱好者,但我绝不会硬着头皮用 vi 写 Java ,毕竟这是给自己添堵还降低我的生产力
    我也不喜欢用 Windows 写代码,那我就把我的 Windows 机器当游戏机,写代码基本用我的 MacBook
    duke807
        11
    duke807  
       2022-02-07 17:02:42 +08:00 via Android
    @3dwelcome 蘋果也自帶有 md5 命令,就叫做 md5

    網頁速度肯定要慢很多,文件大一點甚至瀏覽器直接崩掉,你可以試試加載幾個 G 大小的文件試試
    qq316107934
        12
    qq316107934  
       2022-02-07 17:53:59 +08:00
    @gstqc 没这么简单的,碰撞一般还需要文件大小+文件前 256K 的 hash ,防止 MD5 本身发生碰撞
    3dwelcome
        13
    3dwelcome  
    OP
       2022-02-07 18:03:55 +08:00
    @duke807 “你可以試試加載幾個 G 大小的文件試試”

    浏览器肯定有局限性,没有流式数据,肯定没办法处理几个 G 大小的文件。

    但以前写的工具都是独乐乐,不如我们一起移植到网页上,变成众乐乐。
    duke807
        14
    duke807  
       2022-02-07 19:34:42 +08:00 via Android
    @3dwelcome 我也不是反對網頁,我寫電腦 gui 工具和手機 app 也都是基於網頁,譬如我這個開源的網頁加密小工具: /t/832302 ,朋友反饋一兩百 M 的文件瀏覽器就不行了

    你這個工具適合電腦默認沒有 md5 工具的用戶,和手機用戶(你的工具目前手機使用貌似有 bug ),不過同類的工具應該有很多,可能支持目錄的不多吧
    gstqc
        15
    gstqc  
       2022-02-07 19:38:43 +08:00 via Android
    @qq316107934 百度云盘的是 md5 ,没有额外的数据
    rekulas
        16
    rekulas  
       2022-02-07 22:20:14 +08:00
    @3dwelcome
    @duke807 浏览器可以流式读取文件的,所以理论上可以处理大文件的,当然受限于实际情况可能会有上限
    很多前端 md5 默认 hash 是一次性载入文件计算,文件大了可能会卡,可以改成分段计算,反正我们自己的工具计算 G 级文件并没有明显的问题
    PolarBears
        17
    PolarBears  
       2022-02-08 02:50:25 +08:00
    @gstqc #17 除了文件 md5 以外还需要前 256 KiB 的 MD5 和文件大小(字节)
    iqoo
        18
    iqoo  
       2022-02-08 11:28:29 +08:00
    @3dwelcome 早就有流式数据了,file blob slice 记得十多年前就有了。
    abersheeran
        19
    abersheeran  
       2022-02-11 13:20:04 +08:00
    https://pixiv.app/hashing 巧了,之前也写了一个,文件或者文本的哈希值都可以计算,常见的哈希算法都包括在内了
    3dwelcome
        20
    3dwelcome  
    OP
       2022-02-11 13:59:42 +08:00
    @abersheeran 你的算法好全。

    我总觉得纯 JS 计算 SHA384 和 SHA512 很慢,特别处理大于 5M 文件的情况下。

    有一种未来会改成 WASM 来计算的预感。
    duke807
        21
    duke807  
       2022-02-14 15:55:36 +08:00 via Android
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1992 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:17 · PVG 09:17 · LAX 18:17 · JFK 21:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.