zoukankan      html  css  js  c++  java
  • WEB开发中常见的加密方式有哪些

    今天,我们对信息安全越来越受重视,WEB开发中的各种加密也变得更加重要。通常跟服务器的交互中,为确保数据传输的安全性,避免被人抓包篡改数据,除了 https 的应用,还需要对传输数据进行加解密。今天我们来了解下有哪些常见的加密方式。

    单向散列加密

    单向散列(hash)加密是指把任意长的输入串变化成固定长的输出串,并且由输出串难以得到输入串的加密方法,这种方法称为单项散列加密。广泛应用于对敏感数据加密,比如用户密码,请求参数,文件加密等。我们开发中存储用户密码就用到了单向散列加密算法。

    常见的单向散列加密算法有:

    • MD5
    • SHA
    • MAC
    • CRC

    单向散列加密算法的优点有(以MD5为例):

    • 方便存储:加密后都是固定大小(32位)的字符串,能够分配固定大小的空间存储。
    • 损耗低:加密/加密对于性能的损耗微乎其微。
    • 文件加密:只需要32位字符串就能对一个巨大的文件验证其完整性。
    • 不可逆:大多数的情况下不可逆,具有良好的安全性。

    单向散列加密的缺点就是存在暴力破解的可能性,最好通过加盐值的方式提高安全性,此外可能存在散列冲突。我们都知道MD5加密也是可以破解的。

    对于PHPer来说,不推荐使用md5()简单加密,而是推荐大家使用password_hash()对数据加密存储,该函数使用足够强度的单向散列算法创建密码的哈希(hash),使加密后的数据更加安全可靠。对于用户密码的加密存储和验证支持相当好。

    示例代码:

    //密码加密
    $password = '123456';
    $passwordHash = password_hash(
        $password,
        PASSWORD_DEFAULT,
        ['cost' => 12]
    );
    
    //密码验证
    if (password_verify($password, $passwordHash)) {
        //Success
    } else {
        //Fail
    }

    对称加密

    同一个密钥可以同时用作数据的加密和解密,这种方法称为对称加密。应用于相对大一点的数据量或关键数据的加密的场景。我们开发中常用到接口参数签名验证服务就用到了对称加密算法。

    常见的对称加密算法有:

    • DES
    • AES

    AES 是 DES 的升级版,密钥长度更长,选择更多,也更灵活,安全性更高,速度更快。

    对称加密优点是算法公开、计算量小、加密速度快、加密效率高。

    缺点是发送方和接收方必须商定好密钥,然后使双方都能保存好密钥,密钥管理成为双方的负担。

    对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。

    PHP示例

    //DES加密
    $key = '123kils1321dshfdsvcxpUsdaq23'; //安全密钥
    $data = 'name=iphone11&order_id=201233232323123&price=3357&num=2';//加密明文
    $decodeData = openssl_encrypt($data, 'DES-ECB', $key, 0);

    使用PHP自带的openssl_encrypt加密方法,对数据进行DES加密结果如下:

    oc3PdhugNue/t3i8HfXjd9YUP9BnTLg0Re9R1u2fsZr0jU2hIpCIjR0bruAwNSIGkqulrNHGYm8=

    另外一方在拿到密文后,再使用相同的密钥,使用openssl_decrypt()对密文进行DES解密:

    $key = '123kils1321dshfdsvcxpUsdaq23'; //安全密钥
    $decodeData = 'oc3PdhugNue/t3i8HfXjd9YUP9BnTLg0Re9R1u2fsZr0jU2hIpCIjR0bruAwNSIGkqulrNHGYm8=';
    $de = openssl_decrypt($decodeData, 'DES-ECB', $key, 0);
    echo $de;

    运行代码,最后得到解密后的结果:

    name=iphone11&order_id=201233232323123&price=3357&num=2

    DES-ECB是加密方式,可以到php官方文档上查看更多加密方式:https://www.php.net/manual/zh/function.openssl-get-cipher-methods.php

    非对称加密

    非对称加密是指需要两个密钥来进行加密和解密,这两个秘钥分别是公钥(public key)和私钥(private key),这种方法称为非对称加密。非对称加密适合于对安全性要求很高的场景,适合加密少量数据,比如支付数据、CA数字证书等。

    常见的非对称加密算法有RSARSA2

    非对称加密的优点是与对称加密相比,安全性更好,加解密需要不同的密钥,公钥和私钥都可进行相互的加解密。

    缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

    非对称加密算法的RSA2比RSA有更强的安全能力。蚂蚁金服,新浪微博 都在使用 RSA2 算法。

    创建公钥和私钥:

    openssl genrsa -out private_key.pem 2048
    openssl rsa -in private_key.pem -pubout -out public_key.pem

    执行上面命令,会生成private_key.pempublic_key.pem 两个文件。

    具体示例代码我们在后续的文章专门会讲解,敬请留意。

    前端加密

    前端的朋友可能会关注前端js加密,我们在做 WEB 的登录功能时一般是通过 Form 提交或 Ajax 方式提交到服务器进行验证的。为了防止抓包,登录密码肯定要先进行一次加密(RSA),再提交到服务器进行验证。一些大公司都在使用,比如淘宝、京东、新浪 等。

    前端加密也有很多现成的js库,如:

    JS-RSA: 用于执行OpenSSL RSA加密、解密和密钥生成的Javascript库,https://github.com/travist/jsencrypt

    MD5: 单向散列加密md5 js库,https://github.com/blueimp/JavaScript-MD5

    crypto-js: 对称加密AES js库,https://github.com/brix/crypto-js

    https://www.helloweba.net/news/629.html

  • 相关阅读:
    9.1 Dubbo和Zookeeper安装
    9.0 dubbo与zookeeper的关系
    8. MVC三层架构到微服务架构的思考
    7.6 SpringBoot读取Resource下文件的几种方式
    7.5 cron表达式详解,cron表达式写法,cron表达式例子
    7.4 异步、定时和邮件发送任务
    7.3.2 Swagger注解
    springboot自定义消息转换器HttpMessageConverter
    SpringBoot项目中获取applicationContext对象
    为什么要实现Serializable
  • 原文地址:https://www.cnblogs.com/dreamboycx/p/15267707.html
Copyright © 2011-2022 走看看