前端加密和nodejs加密的总结以及使用哪些加密方式和加密库的推荐

最近在前端项目和nodejs项目之间遇到了一个加密相关的问题,查了许多资料后发现心里更加迷糊了产生了不少问题比如:前端到底有哪些加密方式呢?一查各式各样的加密方式md5,rsa,aes,base64编码,sha1…等等,究竟该用哪几种呢?有没有相关的库让我去使用呢?一查各种各样的库,也很多如:crypto-js,bcryptjs,jsencrypt等

知识前提

在了解加密方式和加密库之前首先得了解常用的加密类型。

  1. Hash加密算法:一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一地确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。Hash主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做Hash值.也可以说,Hash就是找到一种数据内容和数据存放地址之间的映射关系。了解了Hash基本定义,就不能不提到一些著名的Hash算法,MD5和SHA1可以说是目前应用最广泛的Hash算法,而它们都是以MD4为基础设计的
  2. 对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。
  3. 非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

说结论

1.需要加密防篡改并且不需要解密的情况下用什么方式?
答:md5 、sha256 这类型的加密可以是一种过程不可逆的加密类型,理论上是没办法解开的(实际嘛还是要花功夫,但至少可以挡下99.9%的人嘛)而这两种类型的加密也在前端中使用非常的广泛(大家都在用所以也不用担心什么)。
2.需要加密又需要解密还需要效率高的情况下用什么?
答:AES 加密,这类方式需要后端和前端共用一个私钥,基本上由前端来生成并且给后端
3.需要加密又需要解密还需要安全性高的,但是又不怎么在乎性能的情况下用什么?
答:RSA 加密,这种方式基本上由后端来给公钥,然后我们前端加密一下交给后端即可。如果安全性要更好则可以结合AES一起使用,推荐文章:点击

对于其他类型的加密方式这里就不做总结了,上面这几个无非就是前端最常用也用的最多的加密方式而已,至于其他的比如后端如果提供了其他加密方式,那更好,只需要网上找个对应类型的库引用即可

对于库的推荐:
在使用base64,md5、sha256和 AES 这几种加密方式的情况下完全可以使用 crypto-js 这个库,不用再去考虑其他的了,如果担心库太大了那么可以根据需要使用的加密类型单独引对于的类型的库即可,
如:md5使用md5.js
base64.js使用base64.js
sha256 使用 sha.js
AES 使用 aes-js

在使用rsa加密的时候使用 jsencrypt这个库用的比较舒服,密钥生成

bcryptjs 对于nodejs的开发对密码进行加密保存是比较好用的

最后说个:其实前端加密无论使用哪个加密都一样是有可能性被他人获取到相关的公钥或密钥的(比如拦截请求,查找源代码等),然后进行加密与后端通讯,所以前端加密所谓的安全性还是有限的,最主要的还是在后端。但又说回来,前端加个密它至少也能防止绝大部分人看到明面上的东西,可以防止绝大部分的意外情况,反正也就按个插件调个方法而已,多简单的事。而且前后端都加密这也更加的提高了项目的安全性。

你可能感兴趣的:(javascript,nodejs,前端,加密)