c#md5签名还是hash1签名好

 我来答
若以下回答无法解决问题,邀请你更新回答
Tech_Monkeye5
2017-09-08 · TA获得超过984个赞
知道小有建树答主
回答量:330
采纳率:92%
帮助的人:78.4万
展开全部
两个均不是签名而是摘要。所谓的摘要,是指的对某些信息进行一种摘要编码,使用该信息内容一旦发生更改,则摘要信息会发生变化,摘要只能保证数据防篡改的功能。
对于md5与sha1(注意不是hash1),两者的差别不是很大,md5摘要使用了128bit(16bytes)容量,而sha1使用的是160bit的容量,因为不管那个算法都是内容进行了摘要,你一旦修改内容,则Md5值或sha1值都是会发生变化的。如果说哪个好一点,针对目前的应用来说,两者这128bit/160bit上做对比的意义并不是很大,只是多种选择而已,比如身份证的最后一位(校验位,其实是对前边17位的摘要而已,这和md5/sha1的作用是一样的),因为其容量只有11种情况(相当于不到4bit),这种比较才有一定的意义,因为别人在修改前边内容时,后边相同的机率比较大,128bit/160bit无论在性能上还是冲撞机率上比较意义都不是很大,一般情况下可以直接选用md5即可,sha1只是一个备选方案,如果真的为安全性等各个方面考虑,可考虑使用MD5Cng/Sha1Cng,Sha系列还存在一种可以扩展的参考,如Sha256/Sha384等等,这个的容量要比Sha1的160位容量大些,基本上来说如果文件密级强度较高,内容较多时可以考虑使用sha256或sha384或sha512,如果内容密级强度不大或内容不多时,可以考虑直接使用md5/sha1就可以了,sha1是一个备选方案,除非是你当前对整个内容不知道密级(可能涉及内容较多或密级较高时,可选择sha256,或选择sha1以备将来升级)。
再说一下签名,签名内涵其实是摘要,它表示的意思是内容经过自身私钥组合后散列值(hash值),也就是说,A/B两个人同时对相同的内容进行签名,所得的hash值是不一样的,这样可知道具体的消息来源,起到一个防抵赖的做用,或验证消息来源的作用。它与非对称加密的不同之处就在于使用了不同的密钥。
对于非对称加密,通信的双方都有一个公私钥对,A使用B的公钥加密,这就是通信中的加密方式,A使用B的公钥加密,显然只有B获得信息后,使用自己的私钥可以进行解密,而其他人因为不知道B的私钥无法对真实的通信内容解密。
反过来,如果A使用A的私钥进行变换(这个就被称为签名),那么由于A的公钥是公开的,所有人拿到消息内容后都可以使用A的公钥进行解密(其实是校验,对于流程上来说跟解密是一样的方式,但由于所有人都具有A的公钥,所以每个人都解密出相同的内容),如果解密内容与真实消息内容是一样的,那么这个消息只可能是具有A公钥对应的私钥发出的,所以这个内容就叫签名。(真正实的流程是,由于非对称加密不适合大量数据加密,而在发布消息时为了证明消息的可靠来源,非对称加密其实是对内容先进行了摘要,然后把摘要使用私钥进行了加密变换,而校验方也是将消息内容先行摘要,然后使用A的公钥对签名进行了解密,解密结果与消息的摘要相同,则能说明来源,如果不同就是来源错误,所以真实在使用verify,sign时要注意,不能要你先手工摘要消息内容,而是sign时会自动处理,sign时有一个参数就是让你选择使用md5/sha1或是其他,只不过是使用OID来说明的)。OID其实是对md5/sha1/椭圆等多种算法的一个编码结构,有关OID及其转换内容可查看相关MSDN。
以上可以,摘要算法进行相当于一本书的目录,但这个目录并不是简单的抽取部分纲目,而是计算了所有内容算出的一个散列值,一般内容发生更改,则散列一定会发生不知预知的变化,而普通的目录只有在纲目修改时才考虑修改目录。所以它的作用仅仅启动了内容防篡改的作用,说白了也是一种校验过程,相比校验其实算法独立简单,为了方面处理其实的错误,如奇偶校验(只是通知内容中多少个为1的位数,如果是奇数个则做1,如果是偶数个则做0,因为只有一个bit,所有最终它保证整个内容中有偶数个1——也有人这么理解,当然他的能力也只能校验出一个的bit错误,还有类似身份证最后一位校验码,类似的设计也有很多,我也曾经设计过一个串码结构,最后6bit是校验,可以防止部分无效编码)。
而签名则是对来源进行校验的,签名涉及到非对称加密,它的作用是指明了消息来源,另外一点就是防止抵赖。
加密则是对内容进行加密,只有相应的密码才能解密。一般加密形态是非对称加密来协商对称密钥,然后内容是使用对称加密的方式进行加密。说白了就是非对称加密保证了对称密钥不被窃取而已。比如我设计的通信安全平台,每天都由通信的另一方传递一个对称密钥,使用自己的私钥签名一下自己的对称密钥,然后使用安全平台的公钥将密码和签名进行加密,送到安全平台上来,安全平台进行解密,根据解密后的内容(其他人无法解密),校验消息来源(就是使用另一方的公钥来校验是否来是对应的合作方),如果全部正确,将对称密钥存储到安全的地方。如果另一个需要加密内容上传时,就使用这个对称密钥进行加密,服务端使用对应的密码解密。这个密钥我设定为每24个小时失效,所有另一方必须每24小时内进行一定密钥的协商,这个业务被定义为日签(有点每天签到的意思)。其他要注意的是非对称密钥的保存与对称密钥的保存(不要大摇大摆地放到某个文件中或数据库中,这样所有做的一切都白费了,比如别人拿到了你的文件或拖了你的数据库,虽然只有一日时间有效,但一日之内能发生的事儿太多了,比如全求每天会死36万人左右!)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式