V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
ctt
V2EX  ›  奇思妙想

base64 的安全性如何

  •  
  •   ctt · 2017-08-31 17:05:09 +08:00 · 6570 次点击
    这是一个创建于 2675 天前的主题,其中的信息可能已经有所发展或是发生改变。
    base64 虽然只是编码文档,但也用到了编码字符表格:
    "ABIDEFGHCJKLMNOPQujTUVWXYZabcdefghiSklmnopqrstRvwxyz0123456789+/"

    如果把这个字符表随机打乱,比如
    "/EXHYI6sc9RJPZyeqWi2QbNdh5uDL1MonwfS8VKxUrvF03lAGt7OgBk+zjC4Tmpa"

    这样的话,有 64!( 10^89 )种可能。所以如果不知道打乱之后的字符表,而且这个字符表只有我自己知道,那是不是就已经实现了非常安全的加密?

    应用:做了个网页文章的加密方法,生成随机字符表加密解密。
    第 1 条附言  ·  2017-08-31 17:44:44 +08:00
    多谢众多 v 友科普。。的确不关 base64 的事
    43 条回复    2017-09-01 20:10:21 +08:00
    66beta
        1
    66beta  
       2017-08-31 17:10:12 +08:00
    只有你知道,你打算用来干什么?
    LeeSeoung
        2
    LeeSeoung  
       2017-08-31 17:10:41 +08:00   ❤️ 1
    出现规律是可以统计的。。。如果能确定算法是 base64 编码表是可以被逆向出来的。
    Mac
        3
    Mac  
       2017-08-31 17:11:49 +08:00   ❤️ 1
    自带密码本的话,干嘛还要 BASE64,任何 ASCII 都可以啊,换成 BASE64 还占空间。
    nazor
        4
    nazor  
       2017-08-31 17:12:14 +08:00
    额,网页加密的话,那解密算法不就被知道了。
    yidinghe
        5
    yidinghe  
       2017-08-31 17:12:22 +08:00   ❤️ 1
    简单的用来躲避敏感词检查是可以的。
    wevsty
        6
    wevsty  
       2017-08-31 17:12:23 +08:00
    数据经过密钥变换成密文,密文安全不安全这是加密算法的问题,和 base64 有毛关系?
    aploium
        7
    aploium  
       2017-08-31 17:13:21 +08:00   ❤️ 1
    虽然在知道加密方式的前提下非常容易攻破, 不过用来欺骗别人的 base64 解码器倒是可以的 (可是那为什么不简单地 AES 一下)
    FanWall
        8
    FanWall  
       2017-08-31 17:14:40 +08:00 via Android
    无安全性可言
    Leafove
        9
    Leafove  
       2017-08-31 17:18:37 +08:00
    base64 目前用来防止爬虫还可以,其他算了
    learnshare
        10
    learnshare  
       2017-08-31 17:18:42 +08:00
    xiami 的 URL 规律就被猜出来了,当然加密步骤太少,逻辑太简单
    terrawu
        11
    terrawu  
       2017-08-31 17:20:55 +08:00   ❤️ 1
    躲避敏感词检查也不行,比如过滤器可以直接把 “郭文贵” 预编码成 base64 可能的组合格式(不多),然后直接 AC 自动机识别即可。不需要解码了。
    scriptB0y
        12
    scriptB0y  
       2017-08-31 17:23:03 +08:00   ❤️ 1
    跟 base64 没什么关系,原理就是个两个密码本,第一个是固定的( base64 )第二个是随机的。

    base64 的部分也可以换成“将字符变成在键盘上的位置,比如 a 变成 3,1 表示第三行第一个”
    BOYPT
        13
    BOYPT  
       2017-08-31 17:30:16 +08:00
    自己开脑洞想出来的都不安全。
    Valyrian
        14
    Valyrian  
       2017-08-31 17:32:04 +08:00   ❤️ 1
    redtea
        15
    redtea  
       2017-08-31 17:32:07 +08:00   ❤️ 1
    这不就是凯撒密码吗?即使是德军使用的恩尼格玛密码机,号称不可破解,最后还是被图灵破解了。
    Daming
        16
    Daming  
       2017-08-31 17:40:44 +08:00   ❤️ 1
    一般做下 rot13 就可以满足要求了。
    helica
        17
    helica  
       2017-08-31 17:41:57 +08:00 via iPhone   ❤️ 1
    老老实实 sha aes 吧
    40huo
        18
    40huo  
       2017-08-31 17:57:49 +08:00   ❤️ 1
    单表加密没用的,还是用点现代的加密吧
    jacy
        19
    jacy  
       2017-08-31 18:50:12 +08:00
    @learnshare 有链接吗,想看看
    learnshare
        20
    learnshare  
       2017-08-31 20:29:19 +08:00
    @jacy 相关资料能搜到的
    billlee
        21
    billlee  
       2017-08-31 21:17:42 +08:00
    单表密码,统计一下各个字符的频率,就破解了
    KevZhi
        22
    KevZhi  
       2017-08-31 21:22:24 +08:00
    凯撒密码已经被通过统计学方法破解,英文正文内每个字母出现的频率都是有大概的值的
    caomu
        23
    caomu  
       2017-08-31 21:36:04 +08:00 via Android
    有密码学入门的书推荐吗?
    Shura
        24
    Shura  
       2017-08-31 21:52:55 +08:00
    @caomu 《图解密码技术》
    zhs227
        25
    zhs227  
       2017-08-31 22:46:13 +08:00   ❤️ 1
    针对英文的只要统计一下字母的使用频率就可以解出来。中文的可能复杂一些,但并不是不可解。
    最好的还是非对称加密。
    ctt
        26
    ctt  
    OP
       2017-08-31 22:48:41 +08:00
    @zhs227 #25 我也是在想实践方面,中文文章的话还是可以一用的,特别是文本比较短的话,特征不太明显
    zhs227
        27
    zhs227  
       2017-08-31 22:53:29 +08:00
    网页的其实没有用,因为还原算法是明文的。如果你做个 App 还算有点意义。
    能防止 censorship,目前还没有看到其它优势。写来玩一下也还是可以的,至少方法上是可行的。
    ctt
        28
    ctt  
    OP
       2017-08-31 22:57:14 +08:00 via Android
    @zhs227 访问者持有密码本,然后浏览器里 js 解码,应该不会被窃吧
    zhs227
        29
    zhs227  
       2017-08-31 23:12:16 +08:00   ❤️ 1
    原谅我实在脑洞没开那么大。如果你是说把上面 base64 那一长串东西输入到表单里,然后点击确定再查看的话,一般的用途还是可以了。
    shuangguanQuail
        30
    shuangguanQuail  
       2017-09-01 00:11:41 +08:00
    信息安全准则之一:不要随意使用自己设计的加密算法。

    而且,这个连加密算法都算不上吧
    johnnie502
        31
    johnnie502  
       2017-09-01 01:07:51 +08:00
    这和明文有区别?
    yangqi
        32
    yangqi  
       2017-09-01 01:27:13 +08:00
    @ctt 访问者如何获得密码本?
    loadinger
        33
    loadinger  
       2017-09-01 09:16:10 +08:00
    编码和加密
    tghgffdgd
        34
    tghgffdgd  
       2017-09-01 09:51:52 +08:00 via Android
    @yidinghe 说到躲避敏感词我就想笑,某网站在线加解密 based 因为编码文出现 tnt 直接被替代字符串了
    chuanqirenwu
        35
    chuanqirenwu  
       2017-09-01 10:29:55 +08:00
    怎么解密?
    ctt
        36
    ctt  
    OP
       2017-09-01 11:08:15 +08:00
    @chuanqirenwu #35
    写写小文章,偶尔需要加密,但我用的 github page 所以就纯静态的想用 js 实现下加密解密,之前感觉 aes 啥的太复杂,于是试了下 base64 更换那个编码表的方案。(现在已经用 aes 实现了一个)

    方法是这样的:

    一个 js 文件里面包括了 base64 编码函数。另一个 js 里面存放了根据特定编码表(就是那一长串 64 位字符)加密好的文章。

    一个 html 文件实现文章的显示。通过识别 url 里的 hash,那个#后面的字符作为文章键值,找到 js 文件对应的加密字符串,然后需要输入密码,就是那一长串 64 位字符,然后浏览器中 base64 解码了。当然每次输密码也比较麻烦,url 里面如果同时包含了那一长串和文章的键值,那就可以直接解密显示。

    至于如何添加文章,做一个生成器。可以把要加密的文章输进去,生成对应的一行加密后的内容,添加到那个存储文章的文件里。。。图片附件的我用 aes 实现了下。

    chuanqirenwu
        37
    chuanqirenwu  
       2017-09-01 11:59:01 +08:00
    @ctt 放在 URL,URL 会不会有长度限制。我可以这样理解么?本质上是通过对照密码本解密的?
    wizardforcel
        38
    wizardforcel  
       2017-09-01 13:26:01 +08:00 via Android
    @LeeSeoung 统计频率是最不靠谱的,因为可以混淆。
    paragon
        39
    paragon  
       2017-09-01 15:28:59 +08:00
    在统计学面前这些都是鶸~
    nadoo
        40
    nadoo  
       2017-09-01 15:32:40 +08:00
    @learnshare 说到虾米,刚去看了下,虾米现在貌似不是数字 id 了,如: http://www.xiami.com/song/VdNH54440 您是说现在虾米 url 中的这个 id,和数字 id 的转换算法,有人公布了吗?
    ctt
        41
    ctt  
    OP
       2017-09-01 15:58:17 +08:00
    @chuanqirenwu #37 是的,就是换了套对照的密码本。大部分浏览器处理几百个字符长度的网址都是毫无压力的吧,密码本就是 64 位还可以。
    learnshare
        42
    learnshare  
       2017-09-01 16:01:03 +08:00
    @nadoo 说的是 API 里 mp3 URL 的加密方法,不是音乐 ID
    nadoo
        43
    nadoo  
       2017-09-01 20:10:21 +08:00
    @learnshare OK,收到!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2769 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:35 · PVG 14:35 · LAX 22:35 · JFK 01:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.