【问题标题】:Matching hashes in a file匹配文件中的哈希
【发布时间】:2016-12-09 10:38:26
【问题描述】:

我有一个包含哈希的文件,我需要做的是用正则表达式匹配所有特定的哈希,如果有更简单的方法请详细说明,但是这个文件包含多种不同类型的哈希:

请注意,哈希类型仅在此文件中用于测试目的,哈希类型不会在文件中

SHA1 => a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
SHA1 => c8cc3f3b4b33523b8c180da8562a5dc42a00677c
SHA1 => abf6021ef8e11106b894bea04c03e9d8a8de17a6
SHA224 => 90a3ed9e32b2aaf4c61c410eb925426119e1a9dc53d4286ade99a809
SHA224 => 40e223e699912131a99ee76c5e065827373c67bdfaf99d944fe8dfc8
SHA224 => 2acb3a17dd92e2bf54b345b3711e8ead183e01794aafced5ed4ad23e
SHA => f8d3b312442a67706057aeb45b983221afb4f035
SHA => 0c37a678e8eef041b82b3025e64fc01a670bb0f0
SHA => 1f77da8f9d10720e6bbd35b0b998bd7f0bb79381
SHA384 => 768412320f7b0aa5812fce428dc4706b3cae50e02a64caa16a782249bfe8efc4b7ef1ccb126255d196047dfedf17a0a9
SHA384 => 67d36f4834cb7e79788381f849c21a63b968732bf0f3fac24bf4b24423b797fd12269e2cd7fa428bdc86a48ada5e3577
SHA384 => b66651b7190abc1abdb8c7829207a06335045c353b748462a193042be584603a85587b95806f3fef1da8b1da983d5fb1
ecdsa-with-SHA1 => a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
ecdsa-with-SHA1 => c8cc3f3b4b33523b8c180da8562a5dc42a00677c
ecdsa-with-SHA1 => abf6021ef8e11106b894bea04c03e9d8a8de17a6
SHA256 => 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
SHA256 => 34ad260fd7ffae7f4b5c716da1d9d422f95775a5f6f5b910201adfa303ef26a8
SHA256 => 8f2cfb70a71a9f40f95322d176998edce14122a16fa208a8b1cc993d36df3f1d
SHA512 => ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc
5fa9ad8e6f57f50028a8ff
SHA512 => d0351496ef238247ccba08518f10678a6211080a98a6128fa49bd225a2bbec360e3e1b93759f68c14ae3b95096fd81682c1f4a1453
e0057af4a55a910d3066b2
SHA512 => b4cc5ce80cc15910c6e87b15adf1df5485f3165bb02cd5e2d95d3174e137de1d1b6eb0f67ace107f16a234682edd72a6896645969b
19691f38a12199dfc5007e
md4 => db346d691d7acc4dc2625db19f9e3f52
md4 => 4506d07a12e2d2b8f26485a455d6c69f
md4 => 369ee30df7b4b261d5dcd5b607ffca17
md5 => 098f6bcd4621d373cade4e832627b4f6
md5 => cb466b639885e93973c0a272c339ff9a
md5 => ae696df69ec720fbb46d52ebbc262fc8
sha1 => a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
sha1 => c8cc3f3b4b33523b8c180da8562a5dc42a00677c
sha1 => abf6021ef8e11106b894bea04c03e9d8a8de17a6
dsaWithSHA => a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
dsaWithSHA => c8cc3f3b4b33523b8c180da8562a5dc42a00677c
dsaWithSHA => abf6021ef8e11106b894bea04c03e9d8a8de17a6
DSA-SHA => a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
DSA-SHA => c8cc3f3b4b33523b8c180da8562a5dc42a00677c
DSA-SHA => abf6021ef8e11106b894bea04c03e9d8a8de17a6
sha224 => 90a3ed9e32b2aaf4c61c410eb925426119e1a9dc53d4286ade99a809
sha224 => 40e223e699912131a99ee76c5e065827373c67bdfaf99d944fe8dfc8
sha224 => 2acb3a17dd92e2bf54b345b3711e8ead183e01794aafced5ed4ad23e
dsaEncryption => a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
dsaEncryption => c8cc3f3b4b33523b8c180da8562a5dc42a00677c
dsaEncryption => abf6021ef8e11106b894bea04c03e9d8a8de17a6
DSA => a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
DSA => c8cc3f3b4b33523b8c180da8562a5dc42a00677c
DSA => abf6021ef8e11106b894bea04c03e9d8a8de17a6
ripemd160 => 5e52fee47e6b070565f74372468cdc699de89107
ripemd160 => b36b88d174a4d7cd16150f0071f150e74939bdcb
ripemd160 => 3d8e0e6cdf562d919887da3af417aa2ecdfa3031
sha => f8d3b312442a67706057aeb45b983221afb4f035
sha => 0c37a678e8eef041b82b3025e64fc01a670bb0f0
sha => 1f77da8f9d10720e6bbd35b0b998bd7f0bb79381
MD5 => 098f6bcd4621d373cade4e832627b4f6
MD5 => cb466b639885e93973c0a272c339ff9a
MD5 => ae696df69ec720fbb46d52ebbc262fc8
MD4 => db346d691d7acc4dc2625db19f9e3f52
MD4 => 4506d07a12e2d2b8f26485a455d6c69f
MD4 => 369ee30df7b4b261d5dcd5b607ffca17
sha384 => 768412320f7b0aa5812fce428dc4706b3cae50e02a64caa16a782249bfe8efc4b7ef1ccb126255d196047dfedf17a0a9
sha384 => 67d36f4834cb7e79788381f849c21a63b968732bf0f3fac24bf4b24423b797fd12269e2cd7fa428bdc86a48ada5e3577
sha384 => b66651b7190abc1abdb8c7829207a06335045c353b748462a193042be584603a85587b95806f3fef1da8b1da983d5fb1
sha256 => 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
sha256 => 34ad260fd7ffae7f4b5c716da1d9d422f95775a5f6f5b910201adfa303ef26a8
sha256 => 8f2cfb70a71a9f40f95322d176998edce14122a16fa208a8b1cc993d36df3f1d
sha512 => ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc
5fa9ad8e6f57f50028a8ff
sha512 => d0351496ef238247ccba08518f10678a6211080a98a6128fa49bd225a2bbec360e3e1b93759f68c14ae3b95096fd81682c1f4a1453
e0057af4a55a910d3066b2
sha512 => b4cc5ce80cc15910c6e87b15adf1df5485f3165bb02cd5e2d95d3174e137de1d1b6eb0f67ace107f16a234682edd72a6896645969b
19691f38a12199dfc5007e
RIPEMD160 => 5e52fee47e6b070565f74372468cdc699de89107
RIPEMD160 => b36b88d174a4d7cd16150f0071f150e74939bdcb
RIPEMD160 => 3d8e0e6cdf562d919887da3af417aa2ecdfa3031
whirlpool => b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f8c6c2eb6a4c4ac75775d032a0ecfdfe85505730
62b653fe92fc7b8fb3b7be8d6
whirlpool => 838b401be3e04657e0559bc338ec1ac71cd810f35dadd9183152f9ceec089458a487ba11d871c1f1bc313a15b2e1f5cefd59a75
1724b0e0562c8bb616bfb6ee8
whirlpool => 6755e2341ff4cf4b50c6287f1809e217bb9b37d2eeeecd01cb720644c072cb51528377c1ab0de5462496efac14221b6c236bb30
96d386e186c59ab102c826ec3

我已经为 MD5 想出了这个正则表达式:([a-fA-F\d]{32,40}) 这有效,但它也匹配了几乎一半的 SHA 哈希,例如:

ae696df69ec720fbb46d52ebbc262fc8 #<= match
369ee30df7b4b261d5dcd5b607ffca17 #<= match
d0351496ef238247ccba08518f10678a <= match continue hash => 6211080a98a6128fa49bd225a2bbec360e3e1b93759f68c14ae3b95096fd81682c1f4a1453
e0057af4a55a910d3066b2

有没有办法我可以匹配 MD 哈希(md4md5)以及 SHA 哈希(sha512sha384sha1 等)?

【问题讨论】:

  • 那么,您想要所有MDSHA 哈希值?
  • @AhsanulHaque 是的
  • 哈希类型实际上是在文件中还是只为我们准备的?
  • 这是你想要的吗? regex101.com/r/ngsts4/1
  • 使用我使用的标志/修饰符。 regex101.com/r/tm6otz/2

标签: python regex hash


【解决方案1】:

您可以依靠OR 登录正则表达式(即|)来获取您需要的内容。这仅在哈希具有特定长度时才有效。基于@chris85 注释,我们可以进一步添加sha512sha384 使用|,例如指定sha512 只有{52,60} 字符,sha384 有{92,100} 字符,依此类推。它会是这样的:

^(?:[a-fA-F\d]{32,40})$|^(?:[a-fA-F\d]{52,60})$|^(?:[a-fA-F\d]{92,100})$

演示:https://regex101.com/r/z5SoCS/1

您可以通过使用组并为每个哈希指定一个名称来进一步增强您的正则表达式。例如,您可以执行以下操作:

^(?<sha384>[a-fA-F\d]{92,100})$

【讨论】:

  • 所有数据都是十六进制的正则表达式是无用的,唯一的提示是长度,不需要正则表达式。举一个例子来区分 MD4 和 MD5,这是不可能的。
  • @zaph 我认为正则表达式可用于捕获哈希字符串。确实,它不会捕捉到 MD4 和 MD5 之间的区别,但它会帮助找到哈希字符串本身的模式,并将其与包含句子或类似内容的其他常规字符串区分开来。正则表达式有助于识别该字符串没有任何空格,并且仅使用从 A 到 F 的字符和数字,并且没有特殊字符等。如果您将此正则表达式放在包含大量常规文本和一个散列的文档中,则它不太可能捕获除散列之外的任何内容。
  • 关键是正则表达式仅使用长度没有任何好处。将使用的文件中没有空格或非十六进制字符,请参阅问题。加密哈希中没有模式,每个位本质上都是独立的。散列无法与随机位区分开,这是加密散列的属性。
  • @Ibrahim 首先,你错了,没有人试图区分 MD4 和 MD5,我试图从文本中提取所有 MD(意思是 MD4 和 MD5)包含哈希的文件。所以你的回答根本没有回答我的问题。这个可以
  • @papasmurf 很高兴我的回答对您有所帮助。您的评论是针对我还是 zaph?
【解决方案2】:

您无法通过检查输出来判断创建哈希的哈希算法。

问题中的所有哈希都以十六进制表示,因此无法通过它们的内容来判断当时创建的哈希。

最好的办法是查看长度,但会有几个哈希值可以创建特定长度。

如果您需要知道哈希,您需要以某种方式对哈希进行编码,例如前缀。

【讨论】:

    猜你喜欢
    • 2020-12-13
    • 2013-04-07
    • 2021-04-23
    • 2019-10-10
    • 2022-11-08
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多