记录一下前端使用CryptoJS的几种加密方式

自己太小白了,之前在PC端项目中使用的MD5加密,现在的小程序项目使用了CryptoJS里面的enc-base64hmac-sha1,之前没有用到过这两种,所以比较疑惑,为何在小程序不继续使用MD5呢?所以在这里记录一下自己解疑惑的一些知识点。

一、前端为何需要加密呢?

随着互联网的兴起,我们对信息的安全越来越受重视,这样就导致在web开发中,对用户密码等各种加密变得更加重要了。与服务器的交互中,为了确保数据传输的安全性,避免被黑客抓包篡改。

二、常见的加密方式

  • Base64
  • 单向散列加密
  • 对称加密
  • 非对称加密

1、Base64加密

对于Base64编码的,我觉得看一篇文章能够解决你的疑惑,我在这里就不赘述了
Base64编码原理

2、单向散列(hash)加密

2.1 定义:指把任意长的输入串编码变化成固定长的输出串,并且由输出串难以得到输入串的加密方式。
2.2 使用场景:对敏感数据加密

如:用户密码,请求参数,文件加密

2.3 常见的单向散列加密算法:
  • MD5
  • SHA
  • MAC
  • CRC
2.4 优点
  • 方便存储:加密后都是固定大小(32位)的字符串,能够分配固定大小的空间存储;
  • 损耗低:加密/加密对于性能的损耗微乎其微;
  • 文件加密:只需要32位字符串就能对一个巨大的文件验证其完整性;
  • 不可逆:大多数的情况下不可逆,具有良好的安全性。
2.5 缺点
  • 存在暴力破解的可能性,最好通过加盐值的方式提高安全性
  • 可能存在散列冲突

3、对称加密

3.1 定义:同一个密钥可以同时用作数据的加密和解密,这种方法称为对称加密。
3.2 使用场景:相对于大一点的数据量或关键数据的加密

如:接口参数签名验证服务

3.3 常见的对称加密算法有:
  • DES
  • AES
    AES是DES的升级版,密钥长度更长,选择更多,也更灵活,安全性更高,速度更快。
3.4 优点
  • 算法公开
  • 计算量小
  • 加密速度快
  • 加密效率高
3.5 缺点
  • 发送方和接收方必须商定好密钥,然后使双方都能保存好密钥,密钥管理成为双方的负担。
    对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。

4、非对称加密

4.1 定义:需要两个密钥来进行加密和解密,这两个密钥分别是公钥(public key)和私钥(private key)。
4.2 使用场景:对安全性要求很高的场景,适合加密少量数据

支付数据、CA数字证书

4.3 常见的对称加密算法有:
  • RSA
  • RSA2
    AES是DES的升级版,密钥长度更长,选择更多,也更灵活,安全性更高,速度更快。
4.4 优点
  • 与对称加密相比,安全性更好,加解密需要不同的密钥,公钥和私钥都可以进行相互的加解密。
4.5 缺点
  • 加密和解密花费时间长,速度慢只适合对少量数据进行加密。
    非对称加密算法的RSA2比RSA有更强的安全能力。蚂蚁金服,新浪微博 都在使用 RSA2 算法。

三、前端加密

前端的朋友可能会关注前端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

四、CryptoJS的几种加密方式

-CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。

  • crypto-js/core
  • crypto-js/x64-core
  • crypto-js/lib-typedarrays

  • crypto-js/md5
  • crypto-js/sha1
  • crypto-js/sha256
  • crypto-js/sha224
  • crypto-js/sha512
  • crypto-js/sha384
  • crypto-js/sha3
  • crypto-js/ripemd160

  • crypto-js/hmac-md5
  • crypto-js/hmac-sha1
  • crypto-js/hmac-sha256
  • crypto-js/hmac-sha224
  • crypto-js/hmac-sha512
  • crypto-js/hmac-sha384
  • crypto-js/hmac-sha3
  • crypto-js/hmac-ripemd160

  • crypto-js/pbkdf2

  • crypto-js/aes
  • crypto-js/tripledes
  • crypto-js/rc4
  • crypto-js/rabbit
  • crypto-js/rabbit-legacy
  • crypto-js/evpkdf

  • crypto-js/format-openssl
  • crypto-js/format-hex

  • crypto-js/enc-latin1
  • crypto-js/enc-utf8
  • crypto-js/enc-hex
  • crypto-js/enc-utf16
  • crypto-js/enc-base64

  • crypto-js/mode-cfb
  • crypto-js/mode-ctr
  • crypto-js/mode-ctr-gladman
  • crypto-js/mode-ofb
  • crypto-js/mode-ecb

  • crypto-js/pad-pkcs7
  • crypto-js/pad-ansix923
  • crypto-js/pad-iso10126
  • crypto-js/pad-iso97971
  • crypto-js/pad-zeropadding
  • crypto-js/pad-nopadding

HMAC 系列是消息验证,用于验证一个消息是否被篡改——如网站上传递 email 和 hmac(email),则接收时可以通过 hmac(email) 获知 email 是否是用户伪造的

你可能感兴趣的:(记录一下前端使用CryptoJS的几种加密方式)