gpt4 book ai didi

python - 这个字符串是 Base64 吗?我怎么知道使用的编码是什么?

转载 作者:太空狗 更新时间:2023-10-29 22:04:27 30 4
gpt4 key购买 nike

这对我来说是一个难题,我真的很生气我无法解决它!所以,如果有人有空闲时间,我想在这里提出一些关于如何解决它的建议!

我使用一个将密码存储在 oracle 数据库中的软件。密码字段的类型为 Varchar2(100 char)。在我看来,该软件对密码进行编码并将编码后的字符串存储在数据库中。

我的密码是“1234”,编码后的字符串是“cRDtpNCeBiql5KOQsKVyrA0sAiA=”。数据库中的所有密码都是28个字符长。

我分配给自己的难题是找到字符串的编码和/或加密。我的第一次检查是基于 Base64

所以这是我在 python 中的第一个测试(空闲):

>>> import base64
>>> encoded = 'cRDtpNCeBiql5KOQsKVyrA0sAiA='
>>> decoded = base64.b64decode(encoded)
>>> decoded
'q\x10\xed\xa4\xd0\x9e\x06*\xa5\xe4\xa3\x90\xb0\xa5r\xac\r,\x02 '
>>> print decoded
qíᄂО*ᆬ䣐ᄚᆬrᆲ

,

这是我的第二个测试:

>>> myString = '1234'
>>> encoded = base64.b64encode(myString)
>>> encoded
'MTIzNA=='
>>> decoded = base64.b64decode('MTIzNA==')
>>> decoded
'1234'

所以,我的第一个想法是这不是 Base64 编码的。在我查看维基百科 ( https://en.wikipedia.org/wiki/Base64 ) 后,Base64 编码的字符串似乎不是固定大小的。我的第二个想法是字符串被加密然后编码为 Base64,这就是为什么我得到看起来很奇怪的解码字符串。

有什么想法吗?

最佳答案

其实是Base64编码的。但是,编码的不是密码本身,而是它的 SHA-1 哈希值。

from sha import sha
print 'cRDtpNCeBiql5KOQsKVyrA0sAiA='.decode('base64').encode('hex')
print sha('1234').hexdigest()

或更新版本的 Python:

from hashlib import sha1
print 'cRDtpNCeBiql5KOQsKVyrA0sAiA='.decode('base64').encode('hex')
print sha1('1234').hexdigest()

Base64 将 3 个字节编码为 4 个字符。因为您有 27 个字符和一个填充,所以您可以看到有 20 个编码字节 (27*3/4)。当与安全相关的内容长度为 20 字节(或 160 位)时,它通常是 SHA-1。当为16字节(128位)时,一般为MD5。

顺便说一句,向混合物中添加随机盐总是一个好主意,这样两个相同的密码就不会在数据库中出现。在 Linux 上,crypt 模块可以帮助您实现这一点并引入更多安全措施。

编辑:回答另一条评论 - 从“加密”密码中获取原件非常容易。几年前有一种名为 Rainbow Tables 的技术非常出名。甚至还有online versions它的。只需以十六进制 (7110eda4d09e062aa5e4a390b0a572ac0d2c0220) 输入您的哈希,它会在一秒钟内为您提供 1234

关于python - 这个字符串是 Base64 吗?我怎么知道使用的编码是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4312492/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com