判断是被SHA256 SHA1还是md5加密的 ?

有没有方法判断一些内容是被 加密方法:
SHA256 SHA1还是md5加密的呢?

阅读 4.3k
1 个回答

首先 SHA 也好、MD5 也罢,并不是“加密”,而是“哈希”(也有翻译成“摘要”、“散列”、“杂凑”等等,是一个意思)。

有加密必有解密,加密时“明文→密文”,解密时“密文→明文”,二者互为逆运算。

而哈希是不可逆的,哈希时“信息→摘要”,却无法反推过来(你可能会知道有彩虹表,但这并不是基于运算,而是硬编码查表而已)。

其次哈希算法一般最后都会转写为 16 进制格式,也就是整个字符串只会由 0-9+A-F 构成,仅仅是长度上有区别而已。

但这种字符串并非一定是哈希值,有可能就是随便打出来的,原文就是如此。比如你看“7A7C42D6206B69846E6C51FAF19F2DEA” 这串字符串,像不像一个哈希值?

确实像,甚至有可能确实就是某段数据通过某种哈希算法后生成的值,但这里其实只是我随机生成的而已:

image.png

所以给定一段 16 进制的字符串,并不能判断字符串是否哈希过、还是原文就是如此。除非你事先知道原文一定不是这种格式的,否则这就是无解的。

最后说长度。MD5 的结果是 128 位(即 32 个字符),SHA1 的结果是 160 位(即 40 个字符),SHA256 的结果是 256 位(即 64 个字符)。

所以如果已知一个哈希值一定只能是 MD5、SHA1、SHA256 三种算法产生的,那确实可以通过长度来判定是哪一种。但如果并没有这种限定,那就无从推断了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏