我有一个用随机特殊字符加盐的解密密钥(它已经被更改):J_a&3@000$0=f%4{4-f-1*1(1-d@0-3&e|0)1&987*5(b@123$1'1(4*0)1}c+f'59@d@8_6_c)4@1@c(3}
我需要删除所有特殊字符并返回它的无盐版本,例如,现在我正在使用:
def remove_salt(decrypted_key):
""" Remove salt from a decrypted key """
invalid_chars = set(string.punctuation)
return_key = []
for c in decrypted_key:
if c not in invalid_chars:
return_key.append(c)
return ''.join(return_key)
所以它看起来像这样:
>>> remove_salt("J_a&3@000$0=f%4{4-f-1*1(1-d@0-3&e|0)1&987*5(b@123$1'1(4*0)1}c+f'59@d@8_6_c)4@1@c(3}")
'Ja30000f44f111d03e019875b12311401cf59d86c41c3'
>>>
是否有更安全的方法可以从钥匙中取出盐而不会完全透露盐是什么,我的意思是string.punctuation
明确指出,无效字符是!@#$ .. etc
。如何在不完全透露我的盐的情况下去除这种盐?
请注意,这是盐渍的方式不是我的选择。我只需要保持这个东西不受影响,而不是盐是什么超级明显。
答案 0 :(得分:1)
我对你使用盐感到困惑。 Salt通常附加在密码的开头或结尾,并且结果被加密和存储。 Salt值本身存储在clear中,主要用于使字典攻击更加困难。因此,当用户输入密码时,您可以从存储密码的任何位置检索其指定的盐,将其附加到他们输入的内容中,使用您选择的任何密码哈希对其进行哈希处理,并检查存储的哈希值是否与提供的哈希相匹配哈希值。也许需要一些澄清 - 为什么要尝试删除密码中嵌入的盐?