【问题标题】:SHA256 encryption and decryption (Python 2.7) - same word but different hashSHA256 加密和解密 (Python 2.7) - 相同的单词但不同的哈希
【发布时间】:2017-07-07 14:30:39
【问题描述】:

我想写一个可以加密和解密单词的脚本。但是我遇到了一个问题,无法理解。我用来加密的这段代码是这样的:

 def encrypt():
    print "Enter string for encryption: \n"
    rec = raw_input()
    enkr =hashlib.sha256(rec).hexdigest()
    print enkr

我用来根据字典解密的代码是这样的:

def decrypt():
    print "Enter hash for decryption: \n"
    rec = raw_input()
    print "Enter path of wordlist"
    list = raw_input()
    wordl=open(list,"r")
    wordk = wordl.readlines()
    for w in wordk:
        w = hashlib.sha256(w).hexdigest()
        if rec.lower() != w:
            print "Not this " + w
        elif rec.lower() ==w:
            print "Found ! " + w
            break
        else:
            print "Nothing found ! "

例如,假设我想加密单词“admin”。我得到这个哈希 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 当我想解密时,我得到了这个 fc8252c8dc55839967c58b9ad755a59b61b67c13227ddae4bd3f78a38bf394f7 我的问题是,为什么我会得到两个具有相同功能的不同哈希?最好的问候,汗

【问题讨论】:

  • 基于反引号的语法用于对少于一行的字符串进行代码格式化。对于多行块,在选择代码后使用编辑器中的{} 按钮将每行缩进四个空格,或者自己添加这些空格。
  • 不要将您正在做的事情描述为“加密”和“解密”,因为它既错误又令人困惑。并确保从您从readlines 得到的字符串末尾去除换行符,readlines 包括它们,raw_input 没有
  • SHA 256 未加密。
  • Print repr(yourstring) 以完全明确的形式获取您的字符串。如果哈希值不同,那么原始值的repr() 可能也会不同。
  • 点头。我认为这里隐藏了一个很好的问题,但它类似于“为什么在使用 raw_input() 和 readlines() 读取时输入字符串具有不同的哈希值?” -- 简而言之,这是一个在进行了比目前更多的初步诊断后得到的问题。

标签: python encryption hash sha256 sha


【解决方案1】:

8c69…a918"admin" 的 SHA256 哈希。

fc82…94f7"admin\n" 的 SHA256 哈希。

file.readlines() 在它读取的每一行的末尾包含一个尾随换行符。要删除它,您可以使用w.rstrip("\n")

【讨论】:

    【解决方案2】:

    rec = raw_input() 中没有换行符。

    另一方面,for w in wordk: 迭代的每一行都有一个尾随换行符。

    所以你必须rstrip("\n")你的行或使用splitlines()在执行哈希之前去掉最后一个换行符。

    【讨论】:

    • 谢谢,我明白了。
    猜你喜欢
    • 2021-02-25
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 2013-05-12
    • 2023-03-15
    • 2019-05-08
    相关资源
    最近更新 更多