V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
szq8014
V2EX  ›  程序员

base64 根本不需要什么打开什么网站来生成啊

  •  7
     
  •   szq8014 · 2020-12-08 11:37:03 +08:00 · 11608 次点击
    这是一个创建于 1452 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这东西本不值得发一个帖子……主要是看到帖子有人又制作了在线 base64 编码 /解码的网站,也见过有人专门自己写了个 python 脚本来处理的……

    其实 chromium 内核的浏览器都自带了这个功能。。使用方式就是在做任意一个页面上打开 DevTools

    base64 编码

    btoa('hello,world')
    
    // "aGVsbG8sd29ybGQ="
    

    base64 解码

    atob('aGVsbG8sd29ybGQ=')
    
    // "hello,world"
    

    配个图

    base64

    顺便说一下平时怎么弄 md5 摘要

    楼主是 windows 用户,安装了 git 客户端,里面集成了 md5sum 功能。

    echo 123 | md5sum
    
    # ba1f2511fc30423bdbb183fe33f3dd0f
    

    配个图

    md5

    说完了,继续潜水了

    第 1 条附言  ·  2020-12-08 12:22:58 +08:00
    有 append 了
    首先给之前创建那些分享工具的人道歉,是我自己使用的场景非常少,也没有考虑到过手机端的使用。
    其次 atob/btoa 问题也挺多,unicode 字符支持不全。

    但是我一直不太敢用在线的那些工具,主要考虑到后台会记录这些数据,现在前端 js 库也这么全了,不如出一个纯前端的工具,也不难
    第 2 条附言  ·  2020-12-08 13:58:59 +08:00
    34L @orzfly 分享了如何解决 atob/btoa 下 utf-8 的处理,又涨见识了

    https://best33.com/311.moe


    有人能把 atob/btoa 联想到 拿针刻磁盘 我也是没想到……

    也让我认识到的确有很多的人愿意用思维负担少的工具的需求
    94 条回复    2023-02-07 22:12:39 +08:00
    hellojay
        1
    hellojay  
       2020-12-08 11:38:37 +08:00   ❤️ 5
    我真的是懒得输入这些,不如我点点鼠标
    echowuhao
        2
    echowuhao  
       2020-12-08 11:38:46 +08:00
    手机上咋办。
    echowuhao
        3
    echowuhao  
       2020-12-08 11:39:38 +08:00   ❤️ 2
    需求不一样,方便程度不一样。

    对于用 markdown 的程序员来讲,word 也是不需要的。
    di1012
        4
    di1012  
       2020-12-08 11:40:16 +08:00
    工具就是为懒人准备的
    52coder
        5
    52coder  
       2020-12-08 11:40:47 +08:00
    虽然知道楼主说的方法,但我都用 chrome 或者 notepad 插件,哈哈哈
    baobao1270
        6
    baobao1270  
       2020-12-08 11:42:52 +08:00
    1 、DevTools 的那个,遇到 UTF8MB4 字符有一些 bug
    2 、不是所有 Windows 程序员都会装 MSYS/MINGW64/WSL 的
    3 、打开 Shell 很麻烦
    szq8014
        7
    szq8014  
    OP
       2020-12-08 11:43:02 +08:00
    @echowuhao #2 手机上我的确没尝试过怎么解决,是我见识少了,没在手机上有这种需求……
    iptables
        8
    iptables  
       2020-12-08 11:44:37 +08:00   ❤️ 11
    macOS 自带 base64 命令

    编码
    ```
    $ echo "Hello, world" | base64
    SGVsbG8sIHdvcmxkCg==
    ```

    解码
    ```
    $ echo "SGVsbG8sIHdvcmxkCg==" | base64 -D
    Hello, world
    ```
    szq8014
        9
    szq8014  
    OP
       2020-12-08 11:44:47 +08:00
    @baobao1270 #6 一般安装了 git 都自带了,这个只能限定在使用 git 的用户,如果用了 svn 等等就只能再想其它办法了……
    xiaoliu926
        10
    xiaoliu926  
       2020-12-08 11:46:32 +08:00
    还要写代码? 我打开百度随便搜一下网站,复制粘贴不爽嚒
    echowuhao
        11
    echowuhao  
       2020-12-08 11:47:15 +08:00
    @szq8014 你下班后灌水看 v2,有人发了个 base64 的 id,你想加他。你可以回家打开电脑。你也可以打开一个网页,解决问题。需求不就来的么。

    我有时候会有些固定的模式的代码,比如一个属性,我要生成多个配置。我可以自己编辑,也可以写个编辑器插件。最后还是发现,我写个 js 函数。弄个网页方便。 当然,我做了很多这方面的工作,生成一个网页太方便。
    szq8014
        12
    szq8014  
    OP
       2020-12-08 11:48:10 +08:00
    @iptables #8 是的 base64/ md5sum 在 unix 环境里面都自带了,挺方便的
    echowuhao
        13
    echowuhao  
       2020-12-08 11:48:43 +08:00
    弄个网页,根据需求,生成我要的配置。 我也可以写个 script,还是没有网页方便。
    h4wklee
        14
    h4wklee  
       2020-12-08 11:50:11 +08:00   ❤️ 1
    怎么讲,如果有个小白问你我用的是 360 浏览器,然后怎么打开 DevTool,然好要不要带括号,这个引号怎么输入的时候,您会负责地教他还是扔个网站给他呢?
    Mirage09
        15
    Mirage09  
       2020-12-08 11:51:49 +08:00 via iPhone
    iPhone 上可以用 shortcut,也很简单
    szq8014
        16
    szq8014  
    OP
       2020-12-08 11:59:11 +08:00
    怎么找不到 append 功能了,不管是 base64 还是 md5 都完全可以在浏览器端实现,如果不是,那可能有别企图。

    不如找一个纯前端的网页工具来使用。

    之前也没想到过还有移动端使用的需求……
    xingyue
        17
    xingyue  
       2020-12-08 12:02:06 +08:00   ❤️ 2
    atob 和 btoa 在有些场景下是“有缺陷”的,比如你试试 btoa('汉字');
    所以 base64-js 在 npm 上高达两千多万的周下载量。。。。
    参见: https://developer.mozilla.org/zh-CN/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Unicode_%E9%97%AE%E9%A2%98
    aloxaf
        18
    aloxaf  
       2020-12-08 12:03:01 +08:00   ❤️ 11
    捉虫:`echo 123` 末尾会有换行符,实际计算的是 123\n 的 md5,应该写成 `echo -n 123 | md5sum` 才对
    不少人都踩过这个坑 2333
    3dwelcome
        19
    3dwelcome  
       2020-12-08 12:03:59 +08:00 via Android
    制作工具还是有必要的,我都自己写过一个 base64 工具页面,无脑点点鼠标,难道不香吗?
    crab
        20
    crab  
       2020-12-08 12:07:01 +08:00
    win 下可以 cmd certutil
    aheadlead
        21
    aheadlead  
       2020-12-08 12:12:35 +08:00
    像我就觉得点鼠标是个很麻烦的事情。。。还得抬手,还得找鼠标指针在哪
    haonse
        22
    haonse  
       2020-12-08 12:14:57 +08:00   ❤️ 1
    无意冒犯楼主,前几天我看过那个帖子,人也说了不是为程序员准备的...就是给小白用的。楼主发这个帖子可能会打击后人分享的积极性
    alan0liang
        23
    alan0liang  
       2020-12-08 12:15:05 +08:00 via Android
    @echowuhao #2 termux
    Cbdy
        24
    Cbdy  
       2020-12-08 12:17:14 +08:00 via Android
    你试试中文
    nnnToTnnn
        25
    nnnToTnnn  
       2020-12-08 12:31:56 +08:00
    无意冒犯楼主,btoa,atob 存在缺陷 ,md5 存在缺陷,sha 的算法比较好。
    nnnToTnnn
        26
    nnnToTnnn  
       2020-12-08 12:33:10 +08:00
    @nnnToTnnn 其次 base 更多的时候不是用 base64 to text 而是 base64 to hex
    ptrees
        27
    ptrees  
       2020-12-08 12:52:38 +08:00
    学到了,装逼技巧+1
    gromit1337
        28
    gromit1337  
       2020-12-08 12:59:58 +08:00
    学到了
    RRRoger
        29
    RRRoger  
       2020-12-08 13:03:40 +08:00   ❤️ 9
    还要写代码?

    还要用工具?

    我都是口算的 [doge]
    kosmosr
        30
    kosmosr  
       2020-12-08 13:16:36 +08:00
    用 uTools 不香吗,啥工具都是一键唤出
    hansnow
        31
    hansnow  
       2020-12-08 13:29:52 +08:00
    没装 git bash 的 windows 用户可以试试 certutil -hashfile yourFullPathFileAddress MD5
    rock_cloud
        32
    rock_cloud  
       2020-12-08 13:32:40 +08:00   ❤️ 1
    啊,说个小细节,echo 123456 | md5sum 和 echo -n 123456 | md5sum 的结果是不一样的,echo -n 可以去除 echo 输出的\n 符,不然出来的 md5 是错的。
    orzfly
        34
    orzfly  
       2020-12-08 13:37:02 +08:00   ❤️ 4
    IGJacklove
        35
    IGJacklove  
       2020-12-08 13:47:51 +08:00 via Android
    我想起了拿针刻光盘的故事
    fiveelementgid
        36
    fiveelementgid  
       2020-12-08 13:49:10 +08:00
    你们不咋用 WSL 的吗.......手机上面 termux 也挺好用的
    ─$ echo -n "123" | base64
    MTIz
    fiveelementgid
        37
    fiveelementgid  
       2020-12-08 13:49:52 +08:00   ❤️ 1
    @rock_cloud 确实细节,当年忘了-n 直接 error 到天亮(
    jimmyismagic
        38
    jimmyismagic  
       2020-12-08 13:50:44 +08:00
    大家都是狠人,不需要那一点
    ETiV
        39
    ETiV  
       2020-12-08 13:54:39 +08:00 via iPhone
    echo -n 也不是万能的,
    好像 alpine 的 echo 实现的不一样,-n -e 都能被直接打印出来,后面我都用 printf 了
    Osk
        40
    Osk  
       2020-12-08 14:01:42 +08:00 via Android
    @ETiV alpine 的 echo 大概是 busybox 的实现,过于简洁
    Osk
        41
    Osk  
       2020-12-08 14:02:33 +08:00 via Android
    Windows 可以用 certutil 和 Pwershell: get-filehash -alg md5|sha1|sha256... file
    yaphets666
        42
    yaphets666  
       2020-12-08 14:11:11 +08:00
    @orzfly 这个文章好像有点问题? 好像不需要 escape 和 unescape 呀 btoa(encodeURIComponent("汉字")) decodeURIComponent(atob(base64)) 就行了
    SmallTeddy
        43
    SmallTeddy  
       2020-12-08 14:17:03 +08:00
    @iptables 我用 echo 编码可以实现 但是解码会提示我 bash: base: command not found
    szq8014
        44
    szq8014  
    OP
       2020-12-08 14:25:41 +08:00
    @yaphets666 #42 你这样出来的 base64 其它方法解的话结果不正确;你可以对比其它工具看看
    Lemeng
        45
    Lemeng  
       2020-12-08 14:27:44 +08:00
    进来学习学习的
    ThirdFlame
        46
    ThirdFlame  
       2020-12-08 14:30:52 +08:00
    echo 要加上-n ,否则会在字符串后边加上\n
    sherlockwhite
        47
    sherlockwhite  
       2020-12-08 14:32:08 +08:00
    我用的是 Chrome 插件
    newtype0092
        48
    newtype0092  
       2020-12-08 14:32:42 +08:00
    @iptables shell 里 echo 有个坑
    echo "hello,world" | base64
    结果是 aGVsbG8sd29ybGQK,和实际结果 aGVsbG8sd29ybGQ= 不一致
    仔细看了下发现原来是 echo 结果默认带换行,改成 printf "hello,world" | base64 正常了
    tadebao
        49
    tadebao  
       2020-12-08 14:37:55 +08:00
    laptop:~$ echo hello,word |base64
    aGVsbG8sd29yZAo=
    aptop:~$ echo aGVsbG8sd29yZAo=|base64 -d
    hello,word
    sasalemma
        50
    sasalemma  
       2020-12-08 15:19:29 +08:00
    呃 (⊙﹏⊙)

    windows 用户有没有 git,都自带 powershell 的。只要是 8.1 以上的系统。就是 powershell 4.x ?以上。

    直接用 get-filehash -algorithm sha1/sha256/md5 都行吧
    wangxiaoaer
        51
    wangxiaoaer  
       2020-12-08 15:36:43 +08:00
    @echowuhao #3 说真的,就 MD 那个列表的鸟样,文档如果层级多点,作者不头晕吗? 再加上如果用了无序列表,读者不眼花吗?
    webshe11
        52
    webshe11  
       2020-12-08 15:42:28 +08:00   ❤️ 1
    推荐一个开源的在线小工具集,可以下下来离线使用,或者放到自己服务器上
    https://github.com/gchq/CyberChef
    nidaye999
        53
    nidaye999  
       2020-12-08 15:43:35 +08:00
    浏览器自带的 btoa 和 atob 有缺陷,比如 btoa('你好') , 否则为什么还有 js-base64 。 第三方库存在肯定是有它的道理,而且 base64 还要兼容 URL 编码。
    20200924
        54
    20200924  
       2020-12-08 16:43:56 +08:00
    学到了
    TypeError
        55
    TypeError  
       2020-12-08 16:45:09 +08:00 via Android
    @echowuhao Android tasker/termux
    julyclyde
        56
    julyclyde  
       2020-12-08 16:52:19 +08:00
    md5sum 是 git 里带的?我还以为是系统自带的……
    ttys001
        57
    ttys001  
       2020-12-08 16:52:46 +08:00
    Mac 有个叫 Boop 的 App 很好用。
    hatebugs
        58
    hatebugs  
       2020-12-08 17:34:29 +08:00
    base64 <<< 'hello'
    base64 -d <<<'aGVsbG8K'
    hatebugs
        59
    hatebugs  
       2020-12-08 17:36:26 +08:00
    @julyclyde md5sum 不是 gnu 里的 coreutils 吗 咋是 git 带的
    qwerthhusn
        60
    qwerthhusn  
       2020-12-08 17:37:08 +08:00
    黑猫白猫
    stille
        61
    stille  
       2020-12-08 17:38:58 +08:00
    macOS 上的 popclip 有 base64 插件好方便的..
    yuzo555
        62
    yuzo555  
       2020-12-08 17:42:42 +08:00
    我们的 base64.us 不会记录,你可以抓包看看。
    除非你主动在高级设置里面切换到 GB2312 编码,否则默认的 UTF-8 编码情况下,纯前端完成,不记录也不走服务端。
    hatebugs
        63
    hatebugs  
       2020-12-08 17:43:01 +08:00
    纠正 , base64 <<< 'hello' ,同样带了换行,还是用 echo -n
    szq8014
        64
    szq8014  
    OP
       2020-12-08 17:46:49 +08:00
    @julyclyde #56
    @hatebugs #59

    就是笼统的说是 git 带的,其实是安装 git 的时候需要一个运行环境,环境里面带了一些基本的 *nix 程序
    jmc891205
        65
    jmc891205  
       2020-12-08 17:47:22 +08:00
    base64 根本不需要打开什么电脑来生成啊(逃
    soulmt
        66
    soulmt  
       2020-12-08 17:55:09 +08:00
    如果你们用 utools, 你们就会发现常用的工具有多么好用, 在这个工具里面你只要唤起 utools,然后输入 base64(提前装一下 base64 插件) 然后复制图片或者拖入图片就好了....
    phpc
        67
    phpc  
       2020-12-08 18:01:41 +08:00
    不错,firefox 也可以用
    litiechui
        68
    litiechui  
       2020-12-08 18:08:39 +08:00
    学到了,感谢楼主
    keepeye
        69
    keepeye  
       2020-12-08 18:11:41 +08:00
    我用 utools 更方便
    tydl
        70
    tydl  
       2020-12-08 18:45:42 +08:00
    @iptables win 系统也有
    Kasumi20
        71
    Kasumi20  
       2020-12-08 18:51:07 +08:00   ❤️ 1
    btoa 只支持二进制字符串,要支持 UTF-8,可以参考:
    https://github.com/develon2015/js/blob/main/src/web/encode/base64.ts

    /**
    * 将 Blob 对象(File 基于 Blob)转换为 Base64 编码.
    * @param blob File 或`new Blob([string])`等 Blob 对象
    */
    export async function Blob2Base64(blob: Blob): Promise<string> {
    let arrayBuffer = await blob.arrayBuffer();
    return ArrayBuffer2Base64(arrayBuffer);
    }

    /**
    * 将 UTF-8 字符串编码为 Base64 字符串
    * String => Blob => ArrayBuffer => Uint8Array => BinaryString => btoa()
    * @param str
    */
    export async function String2Base64(str: string): Promise<string> {
    return Blob2Base64(new Blob([str]));
    }

    export function ArrayBuffer2Base64(buffer: ArrayBuffer): string {
    var binary = '';
    var bytes = new Uint8Array(buffer);
    var len = bytes.byteLength;
    // 将原始二进制数据按字节转换, 拼接为二进制字符串
    for (var i = 0; i < len; i++) {
    、、、
    darknoll
        72
    darknoll  
       2020-12-08 19:07:16 +08:00
    不能支持中文,有啥用
    HangoX
        73
    HangoX  
       2020-12-08 19:20:29 +08:00   ❤️ 1
    心算不就可以了?为什么还需要用电脑
    GoLand
        74
    GoLand  
       2020-12-08 19:42:24 +08:00
    直接 Alfred 不方便吗
    bjzhou1990
        75
    bjzhou1990  
       2020-12-08 20:00:53 +08:00
    既然来了,给我自己写的 base64 脚本打个广告吧 https://v2ex.com/t/699203
    abersheeran
        77
    abersheeran  
       2020-12-09 00:39:20 +08:00
    来都来了,我也给自己的工具打个广告 https://pixiv.app/
    littlecreek
        78
    littlecreek  
       2020-12-09 01:29:20 +08:00
    linux/macos 上也有命令行 command: base64. 不过总有很多对计算机一知半解的用户(包括不少开发者都是一知半解), 告诉他们用命令行或者 Chrome Dev Tools 可能会有畏难情绪, 他们也不在乎 /不了解信息泄露. 定位不同而已.

    ```
    y@192 ~/Downloads » echo hello | base64
    aGVsbG8K
    y@192 ~/Downloads » echo aGVsbG8K | base64 -d
    hello
    y@192 ~/Downloads »
    ```
    fanlis
        79
    fanlis  
       2020-12-09 08:43:11 +08:00
    我都是用这个的, 前端相关的工具还挺全的
    gabezhao
        80
    gabezhao  
       2020-12-09 08:46:26 +08:00
    我动动鼠标的事情为什么要动手输入呢
    binux
        81
    binux  
       2020-12-09 09:17:10 +08:00 via Android   ❤️ 2
    所有说 btoa 有缺陷的都是不理解 base64 算法是什么。
    我觉得这是一道不错的面试题,可以检查基本功是否扎实。
    raptor
        82
    raptor  
       2020-12-09 09:25:33 +08:00
    在电脑上咋弄都方便……哦,Windows 啊?告辞!
    Soar360
        83
    Soar360  
       2020-12-09 10:01:04 +08:00
    所以,我用 winform 做了一个小工具。。
    as5739
        84
    as5739  
       2020-12-09 10:11:31 +08:00
    @fanlis 这个以前集成在一起还蛮方便的,直到某一天改版后分成了多个扩展,就不再用了。。
    skye
        85
    skye  
       2020-12-09 10:18:13 +08:00
    vscode 和 sublime 都有插件
    killerv
        86
    killerv  
       2020-12-09 10:31:26 +08:00
    楼主这就是典型的程序员思维,不了解普通用户的需求。
    467469274
        87
    467469274  
       2020-12-09 10:53:17 +08:00
    有点意思
    Woodrow
        88
    Woodrow  
       2020-12-09 11:07:54 +08:00
    敏感数据, 比如机场的订阅链接, 担心被网站记录, 可以用这种方式.
    Curtion
        89
    Curtion  
       2020-12-09 11:26:14 +08:00
    atob 和 btoa 是肯定有局限性的,很久之前碰见过这个坑,在一定条件下进行的 base64 并不准确,这个条件被我忘记了...
    aguesuka
        90
    aguesuka  
       2020-12-09 11:51:29 +08:00 via Android
    windows 系统貌似自带 md5,还可以算文件
    leekafai
        91
    leekafai  
       2020-12-09 12:15:19 +08:00
    根本不需要下载什么 chrome,win10 自带 edge,linux 那些自带 firefox/opera,macOS 自带 safari
    Kamiyu0087
        92
    Kamiyu0087  
       2020-12-09 12:29:23 +08:00
    使用 jshell 输入 Base64.getEncoder().encodeToString("Hello World".getBytes()) 即可 [doge]
    Breadykid
        93
    Breadykid  
       2020-12-09 12:30:45 +08:00
    Linux 环境的话
    编码 echo $(base64 <<< "你好" )
    解码 echo $(base64 -d <<< "5L2g5aW9Cg==" )
    marsteel
        94
    marsteel  
       2023-02-07 22:12:39 +08:00
    $ export myemail="[email protected]"
    $ jq -n 'env.myemail|@base64'
    "YWJjQGV4YW1wbGUuY29t"
    $export myemail="YWJjQGV4YW1wbGUuY29t"
    $jq -n 'env.myemail|@base64d'
    "[email protected]"
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2814 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 14:37 · PVG 22:37 · LAX 06:37 · JFK 09:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.