zoukankan      html  css  js  c++  java
  • md5学习

    MD5是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的“数字指纹”。

    任何一个文件,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被“篡改”过。

    MD5是一种 Hash 算法,作用是为了信息安全,再具体点,MD5 值就是一串 128 bit 的数据。

    从MD5不可逆的特点来看,不是用来加密的。因为加密完成后无法进行解密操作。

    但是有时用于加密密码并存于数据库,当客户于客户端输入密码时,进行MD5加密与数据库中的密码进行对比,一致则正确。

     加密算法:

    1 散列(哈希)函数

    • 通常有MD5、SHA1、SHA256、SHA512
    • 实质是抽取特征码,这样一般不会重复!是的,不同的文本它的哈希结果是有可能相同的,但概率很小。
      (举例:比如想要识别一个人,我们可以通过他的指纹来锁定他,指纹出现相同的概率很低吧!在这里,人就相当于数据,而指纹就相当于对人这个数据进行hash后得到的结果)
    • 对任意一个二进制数据进行哈希,可以得到定长的字符串结果,例如MD5哈希结果是128位,更多是以32个字符的十六进制格式哈希输出
    • 还有就是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名

    2 对称加密算法

    • 有DES、3DES、AES
    • 加密和解密使用同一个秘钥,加密解密的速度快
    • 适合给大数据进行加密
    • 密钥的安全性非常重要

    3 非对称加密算法:RSA

    1. 使用 公钥 加密,使用 私钥 解密
    2. 使用 私钥 加密,使用 公钥 解密(私钥签名,公钥验签)
    3. 更安全,当然速度会慢下来,如果随着硬件的突破,使用越来越多,特别是支付

    1是对数据加密,2是防止伪造客户端数据,对服务器攻击,更重要是防止模拟了客户端,进行支付相关的操作

    4 对称加密与非对称加密的区别

    就个人理解,最主要的就是密钥的不同,对称加密客户端和服务端使用同一个密钥,非对称加密使用不同的密钥。

    简述下RSA加解密过程:

    假设A、B双方均拥有一对公私钥(PUB_APRI_APUB_BPRI_B)。

    A向B发送Message的整个签名和加密的过程如下:

    1. A先使用HASH对Message生成一个固定长度的信息摘要Message_hash_A
    2. A使用A的私钥PRI_AMessage_hash_A进行签名得到Message_sign(这里为什么不直接对Message进行签名,而要对Message_hash_A进行签名呢?因为Message的长度可能很长,而Message_hash_A的长度则是固定的,这样性能更高,格式也固定,况且hash的结果一般不会出现重复的可能)
    3. A接着使用B的公钥PUB_B对信息Message和信息Message_sign进行加密得到Message_RSA,这时A将Message_RSA发送给B。

    当B接收到A的信息Message_RSA后,获取Message的步骤如下:

    1. B用自己的私钥PRI_B解密得到明文:MessageMessage_sign
    2. 然后B使用A的公钥PUB_AMessage_sign得到Message_hash_A;同时,B再对Message使用与A相同的HASH得到Message_hash_B
    3. 如果Message_hash_AMessage_hash_B相同,则说明Message没有被篡改过。

      一、公钥加密

      假设一下,我找了两串数字,一串是1*,一串是2*。我喜欢2*这串数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1*是我的公钥。我有一个文件,不能让别人       看,我就用1*加密了。别人找到了这个文件,但是他不知道2*就是解密的私钥啊,所以他解不开,只有我可以用串2*,就是我的私钥,来解密。这样我就可以保护数据了。          我的好朋友x用我的公钥1*加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2*就是我的私钥,只有我才能解密,解密后          就得到a。这样,我们就可以传送加密的数据了。

    1. 二、私钥签名
      如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2*是我的私钥),结果所有的人都看到我的内容了,因为他们都知道我的公钥是1*,那么这种加密有什么用处呢?但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2*,加密,加密后的内容是d,发给x,再告诉他解密看是不是c。他用我的公钥1*解密,发现果然是c。这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。

      总结:公钥和私钥是成对的,它们互相解密。
      公钥加密,私钥解密。
      私钥数字签名,公钥验证。

       一个移动客户端与服务端安全交互的解决方案:
      1、客户端使用AES加密报文,使用RSA公钥加密AES密钥
      2、服务端使用私钥解密AES密钥,再使用AES密钥解密密文

      小知识:
      aes/des加密速度快,适合大量数据,des容易破解,一般用3重des,后来又出现了更快更安全的aes。
      rsa是公钥加密算法,速度慢,只能处理少量数据,优点是公钥即使在不安全的网络上公开,也能保证安全常见情况是双方用rsa协商出一个密钥后通过aes/3des给数据加密。RSA 公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够 抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对 其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

  • 相关阅读:
    如何:为 Silverlight 客户端生成双工服务
    Microsoft Sync Framework 2.1 软件开发包 (SDK)
    Windows 下的安装phpMoAdmin
    asp.net安全检测工具 Padding Oracle 检测
    HTTP Basic Authentication for RESTFul Service
    Windows系统性能分析
    Windows Server AppFabric Management Pack for Operations Manager 2007
    Mongo Database 性能优化
    服务器未能识别 HTTP 标头 SOAPAction 的值
    TCP WAIT状态及其对繁忙的服务器的影响
  • 原文地址:https://www.cnblogs.com/seven717/p/9393407.html
Copyright © 2011-2022 走看看