MD5工具输出十六进制值。以同样的方式,SHA和RSA一起产生十六进制(或任何其他)输出吗?
MD5算法、SHA算法和RSA算法有什么不同?
发布于 2011-02-25 15:13:03
这不是输出的类型。十六进制只是格式化数据的方式--因为它们都在处理二进制数据,所以十六进制非常有意义。
重要的是他们做了什么以及他们是如何做到的:
发布于 2013-02-03 15:55:02
MD5是密码散列函数。"SHA“是一个散列函数族的名称;首先是一个短寿命的"SHA”,改名为"SHA-0",然后定义为"SHA-1“(畅销书)。后来又增加了新的家庭成员,统称为"SHA-2",由SHA-224、SHA-256、SHA-384和SHA-512组成。最近,一个新的SHA一代被设计,称为"SHA-3“,但也被称为" Keccak”(这是一个公开的竞争,Keccak是一个候选人的代号,谁最终获胜)。
密码散列函数是一种完全定义的、不使用秘密密钥的确定性函数。它以任意长度的消息(位流、任何位)作为输入,并产生固定大小的输出。输出大小取决于函数,MD5为128位,SHA-1为160位,SHA-256为256位。每个人都可以在给定的输入上计算给定的哈希函数,并且都得到相同的结果。哈希函数也被称为摘要,因为它们以某种方式产生了输入的“校验和”或“摘要”。健壮的哈希函数必须是没有人知道如何“反转”它们,甚至找出两个不同的输入,从而产生相同的输出。后者被称为碰撞,碰撞存在是数学上的必然(因为函数可以接受比它能产生不同的输出更多不同的输入),但是我们要求即使找到一个碰撞也是不可行的。
在碰撞方面,MD5被证明是非常坏的(我们可以在PC上工作几秒钟就产生碰撞),而SHA-0在这方面也被破坏了;SHA-1有点不稳定;到目前为止,SHA家族的其他成员似乎很健壮。哈希函数是如何实现冲突抵抗的,这是一个奇迹,因为整个函数是完全已知的,没有秘密值;它只是混合了太多的数据,使得最好的加密人员无法解开这个过程。
RSA是两种算法:非对称加密算法和数字签名算法。虽然这两种算法都建立在相同的数学基础上,但它们非常不同(许多人将签名描述为“用私钥加密”,这是一个缺陷类推,充其量令人困惑,所以不要这么做)。这两种算法都使用密钥,即必须保密的数据块。对于RSA签名,所签名的不是直接给定的消息(位序列),而是消息的哈希:消息首先使用像SHA-256这样的加密哈希函数处理,然后使用哈希值。这是这样做的,因为RSA的数学只能处理中等大小的值,最多几百位。加密哈希函数是这样的,签名哈希就像对原始数据签名一样好。
这样,RSA和密码散列函数经常一起使用,但它们根本不是一回事。
十六进制是一种将位序列表示成字符序列的方法:十六进制使用从'A‘到’F‘的数字和字母;每个字符精确地编码四个位('0’编码'0000‘、'7’编码'0111‘、'D’编码‘1101’.)。任何位序列(特别是哈希函数的输出)都可以转换为十六进制和返回。十六进制之所以流行,是因为人类的眼睛和大脑善于阅读字符,而不是阅读比特。用于计算文件上密码散列函数的命令行工具通常会为此输出十六进制字符。然而,没有任何东西在本质上将散列函数与十六进制联系在一起:计算机中适合的任何东西都是位序列,因此也是适合十六进制的;散列函数输出只是一组位序列,可以用各种方式进行编码,十六进制只是“传统”方式(尽管经常遇到Base64,尤其是在处理数据库时)。
https://security.stackexchange.com/questions/2298
复制相似问题