base64 两次反转加密后, 逆向解码不一致

2020-08-24 13:21:45 +08:00
 firejoke

直接贴测试代码

import base64


p = b'123456'
print('password: %s' % p)
salt = b'84'
print('salt: %s' % salt)
print('reverser:')
p = p[::-1]
print(p)
print('encode:')
p = base64.b64encode(p, salt)
print(p)
print('reverser:')
p = p.strip(b'=')[::-1]
print(p)
print('encode:')
p = base64.b64encode(p, salt)
print(p)
print('reverser:')
p = p.strip(b'=')[::-1]
print(p)

print('\ndecode password')
print('reverser:')
rp = p[::-1] + b'=='
print(rp)
print('decode:')
rp = base64.b64decode(rp, salt)
print(rp)
print('reverser:')
rp = rp[::-1] + b'=='
print(rp)
print('decode:')
rp = base64.b64decode(rp, salt)
print(rp)
print('reverser:')
rp = rp[::-1]
print(rp)

输出结果:

encode:
NjU0MzIx
reverser:
xIzM0UjN
encode:
eEl6TTBVak4=
reverser:
4kaVBTT6lEe

decode password
reverser:
eEl6TTBVak4==
decode:
xIzM0UjO
reverser:
OjU0MzIx==
decode:
:54321
reverser:
12345:

在第一次反转解码的时候就出错了, 本来是想在 sqlite 里保存一些可逆的加密字符
想着两次 b64 反转加密应该不容易猜, 结果这个 salt 就出了问题
不指定 salt, 就不会出先这种问题
现在想问一下, 有哪些好用的可逆的加密库, 最好是标准库

4621 次点击
所在节点    Python
27 条回复
abc612008
2020-08-24 21:24:27 +08:00
@lewis89 2020 年还 md5 呢? bcrypt 和 argon2 了解下

回 lz:永远不要试图自己自创加密算法。要加密(而且还需要能解密)就 AES,而且如果要保证绝对安全,解密的密钥不能存在服务器里。另外没有听说过加密的时候还加盐的。
lewis89
2020-08-24 22:13:17 +08:00
@abc612008 #21 md5 还行吧,主要是大部分机器直接硬件支持,另外 密码这东西,说白了真要泄漏了,也没办法,当然 salt 分开放 基本上可以大幅度降低风险,除非对面 真的渗透到你的服务或者配置中心的机器,把你内存 dump 下来,那神仙也救不了。
abc612008
2020-08-25 01:28:04 +08:00
@lewis89 先不提 md5 早就可以碰撞了,光是 md5 现在运算速度这么快就不适合作为密码 hash 。密码 hash 很重要的一个衡量标准就是慢,导致攻击成本高。在一个密码学设计的良好的系统里,就算你所有的代码 /算法以及数据库都被攻击者获取了,也无法在合理的时间成本之内破解系统。salt 分开存储、混淆代码等并没有办法在本质上让你的系统变安全,最多只是拖延一点时间,给攻击者稍微多一点工作量而已。
firejoke
2020-08-25 09:12:40 +08:00
@abc612008 #21
@abc612008 #23 我不是加密密码 , 就是不想在 sqlit 里保存明文, 掩盖一下.

@todd7zhang #18
@muzuiget #20 理解错参数了......
unco020511
2020-08-25 09:23:09 +08:00
@guanhui07 严格来说你这句话后半段是个很大的错误,加密是将明文通过某种算法变成密文,并且后续可以通过解密来获取原文,所以加密必定是可逆的,hash(常见的比如 MD5,SHA1,SHA256)是一种摘要算法,你可以上外网看看,一般是不会说什么"MD5 加密"/"不可逆加密"/"不可逆加密算法";哈希( Hash )是将目标文本转换成具有相同长度的、不可逆的杂凑字符串(或叫做消息摘要),而加密( Encrypt )是将目标文本转换成具有不同长度的、可逆的密文。
guanhui07
2020-08-25 09:50:13 +08:00
@unco020511 嗯 不可逆的是摘要
liantao
2020-08-25 15:15:55 +08:00
我也干过这类事,反转后 base64 encode 10 次。。。就很好奇这样别人还破解么?

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

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

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

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

© 2021 V2EX