【问题标题】:Simple programming language with a md5/sha1 hash command?带有 md5/sha1 哈希命令的简单编程语言?
【发布时间】:2012-04-15 04:42:22
【问题描述】:

我正在寻找一个简单的暴力破解密码破解器,它将对来自标准输入的输入进行哈希处理并将结果与​​现有哈希值进行比较(对于我的证券类)。

不过,我从未做过任何涉及哈希的实际编程,因为到目前为止它主要是概念/数学部分。 有没有(相对)易于学习的语言,它有一个简单的哈希命令?我的一个朋友推荐了 Python,但我不确定是否还有其他东西我可以在一两天。我懂一点 C,但散列似乎比较复杂,需要额外的库。

此外,任何有关实际哈希命令的语法帮助将不胜感激。程序本身需要能够支持奇数散列方法,例如两次散列值或使用不会更改的设置盐,并且能够从标准输入获取输入(用于 johntheripper 之类的程序)。

【问题讨论】:

  • 在 PHP 中你可以写 sha1($password)md5($password)。它非常易于学习使用。

标签: python security syntax hash programming-languages


【解决方案1】:

几天之内就学不会什么称职的编程语言。您可能能够弄清楚语法,但除此之外就没有太多了。我喜欢这篇文章:http://norvig.com/21-days.html

这可能没有最好的编程语言。我可以推荐 C#,因为它在 System.Security.Cryptography 中有简单的密码学类。

要查找字节数组的 MD5 哈希,您可以使用以下内容:

byte[] hash = System.Security.Cryptography.MD5.Create().ComputeHash(myByteArray);

要使用 SHA1,只需将 MD5 替换为 SHA1。

如果你想得到一个 ASCII 字符串的哈希值,你可以像这样得到一个字节数组:

byte[] myByteArray = System.Text.Encoding.ASCII.GetBytes(myString);

将字符串转换为哈希的示例函数:

// At the top of the file:
// using System.Security.Cryptography;
// using System.Text;

byte[] GetHash(string message)
{
    return MD5.Create().ComputeHash(Encoding.ASCII.GetBytes(message));
}

【讨论】:

  • 我完全不同意。您可以在不到一天的时间内学习 python - 当然,您不会知道来龙去脉,但有基础知识就足以做到这一点吗?绝对。
  • 任何 值得一提的编程语言(这是双关语吗?)如果您已经了解编程原理,则可以在几分钟内学会。语言的语法。是的,每种语言都有文化方法,但是任何程序员都可以在很大程度上使用一种语言而不真正了解它的文化(例如,我现在正在使用的相当不符合 Python 语言但功能完善的 avro API。(学习编程是另一回事,学习一门语言只是其中的一小部分。)
  • 我知道,几乎任何语言都可以轻松学习“让它发挥作用”。然而,你几乎不可能在一天之内学到任何有用的东西。以我的经验,一门语言最重要的部分是可用的库。语言之间也有许多细微的差异,这可能会使不小心的人绊倒。一门语言远远超出语法。
  • 为什么要向那些明确表示需要快速学习该语言的人推荐一种语法复杂的语言?
  • @Marcin:我个人认为 C# 并不难学。基本语法一点也不难,而且大多数其他功能对于简单的散列程序来说都不是必需的。我从经验中汲取经验,我通过编写一个(中小型)项目来学习 C#。我不会以任何方式贬低 python。我同意 python 是学习编程的好语言,但我更喜欢 C#。
【解决方案2】:

我认为 python 对于这样的事情是一个不错的选择。它以 hashlib module 开头,如果您需要更多功能,PyCrypto toolkit 易于使用并支持大量加密原语,包括散列。如果您已经知道一些 C,那么也许只是将其与 openssl libraries 一起使用会让您更容易掌握。在任何情况下,为您的首选语言(尤其是加密类)学习一个加密库通常是值得的,因为最终您会想要使用一些您不想手动编码的东西,并相信它正确实施。

至于实际哈希命令的语法,这里有一个使用 PyCrypto 的 python 示例,用于获取 SHA256 哈希(使用 python 3.2):

import Crypto.Hash.SHA256

to_hash = "hello, how are you?"
sha256 = Crypto.Hash.SHA256.new()
sha256.update(to_hash.encode())
dgst = sha256.hexdigest()
print(dgst)

产生输出

5c1940d2a11cd8b1e256ea4183ba22cddfa7cc0d00610a159bd7f5886d01067a

【讨论】:

    【解决方案3】:

    假设您只被要求使用散列函数,而不是自己实现散列,Python's hashlib module 有 md5 和 sha1 的例程:

    [为 Python 3 更新,其中hashlib 需要字节,而不是字符串:]

    >>> import hashlib
    >>> s = 'something to hash'
    >>> sb = s.encode("utf8")
    >>> hashlib.md5(sb)
    <md5 HASH object @ 0x7f36f5ce3440>
    >>> hashlib.md5(sb).hexdigest()
    '6f4815fdf1f1fd3f36ac295bf39d26b4'
    >>> hashlib.sha1(sb).hexdigest()
    '72668bc961b0a78bfa1633f6141bcea69ca37468'
    

    [旧版 Python 2 版本:]

    >>> import hashlib
    >>> s = 'something to hash'
    >>> hashlib.md5(s)
    <md5 HASH object @ 0xb7714ca0>
    >>> hashlib.md5(s).hexdigest()
    '6f4815fdf1f1fd3f36ac295bf39d26b4'
    >>> hashlib.sha1(s).hexdigest()
    '72668bc961b0a78bfa1633f6141bcea69ca37468'
    

    【讨论】:

      【解决方案4】:

      python 中的hashlib 库包含以下内容:

      'md5', 'new', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'
      

      详情请查看: http://docs.python.org/release/3.1.3/library/hashlib.html

      >>> import hashlib
      >>> m = hashlib.md5()
      >>> m.update(b"Nobody inspects")
      >>> m.update(b" the spammish repetition")
      >>> m.digest()
      b'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
      >>> m.digest_size
      16
      >>> m.block_size
      64
      

      【讨论】:

        【解决方案5】:

        这个 Python 小程序最适合这类小型工作

        哈希.py

        import hashlib
        import sys
        try:
            hash_name = sys.argv[1]
        except IndexError:
            print 'Specify the hash name as the first argument.'
        else:
            try:
                data = sys.argv[2]
            except IndexError:
                print 'Please enter the data to be hashed'
                sys.exit()
            h = hashlib.new(hash_name)
            h.update(data)
            print h.hexdigest()
        

        输出

        $ python hash.py sha1 password1
        e38ad214943daad1d64c102faec29de4afe9da3d
        $ python hash.py sha256 password1
        0b14d501a594442a01c6859541bcb3e8164d183d32937b851835442f69d5c94e
        $ python hash.py md5 password1
        7c6a180b36896a0a8c02787eeafb0e4c
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-16
          • 1970-01-01
          • 2021-09-21
          • 2014-02-07
          • 2012-12-02
          • 2016-02-17
          • 1970-01-01
          相关资源
          最近更新 更多