【问题标题】:Safer way to remove salt from a decrypted key从解密的密钥中去除盐分的更安全方法
【发布时间】:2017-04-25 23:29:51
【问题描述】:

我有一个用随机特殊字符加盐的解密密钥(已更改):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。如何在不完全暴露我的盐是什么的情况下去除这种盐?

请注意,腌制的方式不是我的选择。我只需要让这东西不加盐,而不会让盐是什么特别明显。

【问题讨论】:

  • 您可以将invalid_chars 设为参数。如果这仍然不是您所追求的,那么我建议您为您读取和使用的无效字符提供一个外部文件。您还可以将代码压缩为 return ''.join(c for c in decrypted_key if c not in invalid_chars)
  • 盐不是秘密信息,所以你不需要隐藏它。我建议您查看标准加密库。
  • 默默无闻!=安全。这不是加盐的工作原理
  • 您这样做只是为了好玩,还是打算在需要适当安全性的严肃应用程序中使用此代码?
  • @PM2Ring 取决于您认为严重的情况。这是一个 API 密钥,盐不是我的选择。

标签: python python-2.7 encryption salt


【解决方案1】:

我对你使用盐感到困惑。加盐通常附加在密码的开头或结尾,并将结果加密并存储。盐值本身以明文形式存储,主要用于使字典攻击更加困难。因此,当用户输入他们的密码时,您可以从存储它的任何地方检索他们指定的盐,将其附加到他们输入的内容中,使用您选择的任何密码散列对其进行散列,并检查存储的散列是否与提供的匹配哈希。也许需要澄清一下 - 为什么要尝试删除嵌入在密码中的盐?

【讨论】:

  • 因为这不是密码,它是 API 密钥,它的加盐方式不是我的选择,我只需要想办法让它不加盐,而不会让它非常明显
猜你喜欢
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2021-06-10
  • 2012-07-05
  • 2016-07-28
  • 2011-02-03
相关资源
最近更新 更多