博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端必知的加密方法
阅读量:4095 次
发布时间:2019-05-25

本文共 2965 字,大约阅读时间需要 9 分钟。

加密算法有很多,如不可逆的摘要算法MD5、SHA(安全哈希算法),可逆的Base64编码,对称加密算法DES、AES,还有非对称加密算法DH、RSA等。那是不是说明我们可以使用任何一种加密算法就能保证网站的安全性,答案是否。举个例子,我们在登录web页面时,发送用户名和密码给服务器,这时请求被拦截了:

(1) 密码采用不可逆加密。因为不可逆加密算法就那几种,不管怎样变换,攻击者都可以模拟登录;

(2) 密码采用可逆加密算法。因为加密是在前端进行加密,所以可能通过js代码看到加密方式,这样也就很容易破解了。

所以针对浏览器-服务器这种模式,最好采用非对称加密算法,即使攻击者知道了加密算法和公钥,他也没法解密,因为用公钥加密的数据只能用私钥才能解密,而且私钥始终保存在服务器,攻击者无法获取。

md5 加密

md5 加密是一种广泛使用的密码散列函数,可以产生出一个128位散列值,用于确保信息传输完整一致。MD5算法的缺点是容易破解,不适用于安全性认证,常用于密码管理、垃圾邮件筛选、SSL的公开密钥认证或数字证书等。不需要解密。

MD5.js 共有6中加密方法:hex_md5(s), b64_md5(s), str_md5(s), hex_hmac_md5(key,data), b64_hmac_md5(key, data), str_hmac_md5(key, data)

使用方法:

var pwd = hex_md5("Victor");console.log(pwd);

base64加密

base64加密是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用作电子邮件标准)中一种可打印字符表示二进制数据的常见编码方法!它其实只是定义用可打印字符传输内容一种方法,并不会产生新的字符集!还可以应用于传输二进制数据,如邮件主题及图片等、加密url、加密cookie等。

需要解密使用。

使用方法:

var str = b.encode("admin:admin");       //加密var str1 = b.decode(str);       //解密console.log(str);console.log(str1);

SHA-1 加密

SHA-1又叫安全哈希加密bai技du术,是当今世界最先近的加密算法。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段密文。主要用于文件身份识别、数字签名和口令加密等。

SHA-1 与 MD5 的比较

  • 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
  • 速度:在相同的硬件上,SHA-1 的运行速度比 MD5 慢。

使用方法:

var sha = hex_sha1('mima123465');console.log(sha);

RSA加密

RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。普遍认为是目前最优秀的公钥方案之一。

RSA允许你选择公钥的大小。512位的密钥被视为不安全的;768位的密钥不用担心受到除了国家安全管理(NSA)外的其他事物的危害;1024位的密钥几乎是安全的。RSA在一些主要产品内部都有嵌入,像 Windows、网景 Navigator、 Quicken和 Lotus Notes。

效率低,数据量小,适合加密核心数据,配合其他加密使用。

原理:

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

使用方法:

var str = "密码";// 公钥var publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfp4T5UK76SfSvn1wr4+PyStkHWONLVITZp5JLkFkHpiERchwShET+WVlLsbbgyt7Yt/boMoxr+XTD2NXd1gPvq11OU3dNYLE5hL2j8BCBw8EswkCbP+GgYdGF3FRw4eGURA4fcSO44IKuWtmtSyw7y1OMqzMUb6PROXrMFbrntQIDAQAB";// 私钥var privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJ+nhPlQrvpJ9K+fXCvj4/JK2QdY40tUhNmnkkuQWQemIRFyHBKERP5ZWUuxtuDK3ti39ugyjGv5dMPY1d3WA++rXU5Td01gsTmEvaPwEIHDwSzCQJs/4aBh0YXcVHDh4ZREDh9xI7jggq5a2a1LLDvLU4yrMxRvo9E5eswVuue1AgMBAAECgYBBGEtmX9hIIplKdf5dwtgw9QWSMlLSZw6Xs/Q5LQyvyrOW6mC5yAZdck6vRzFabDz6Pd/FAr8wUxChvapNfbIyhCsyAuqjVWV/aGDhaauQvwm3MrZ33jnMxI1z9UXPHTzWrYOltv/cKVqvDTKzEokDoTzEVLQClaYcEVMwhRrpYQJBANR48h9o1s7y0sAOoVBo5ktGZhb6gHtwNJ4Yw7Aey2bAWjgU4PevUq985+jBWhdAj81dZ0lMwARBIcYzyo0RLMkCQQDAXIup+fViw0BD+gl36kOo5RkTgz3aoALJsDBLGWi2J9QY9i0UZO9LsjNlYlTldKRzJWkhjdAdxuZe+8Mr8tWNAkB39HB92yqrW9wwIhJg21hpVy17+6FeD1MljsWsQTaEpERLNT5tl8YO3W3wsniyd/i38OvHLlWaEUuIIuVQD0pBAkAFXk/ThZNQl0xi2UaMXzBWNVaW0dHXGSIayN0AK4xdkQz9SVmGuS5oeWevy6e84513TTL66b9GJXfmbLZMsrE9AkAXuppwZW4I/xWZ2RaIsKqyyYYJUPbZ9HT3iO6FSUVPskzaOIPgU9sir+UcvJfWgXDWQ2F/4uUogB2ZS45YcFM8";// 加密var encrypt = new JSEncrypt();encrypt.setPublicKey(publicKey);var encryptStr = encrypt.encrypt(str);console.log("加密后:" + encryptStr);// 解密var decrypt = new JSEncrypt();decrypt.setPrivateKey(privateKey);var decryptStr = decrypt.decrypt(encryptStr);console.log( "解密后:" + decryptStr);

转载地址:http://rxvii.baihongyu.com/

你可能感兴趣的文章
SSM-CRUD(2)---查询
查看>>
SSM-CRUD (3)---查询功能改造
查看>>
Nginx(2)---安装与启动
查看>>
springBoot(5)---整合servlet、Filter、Listener
查看>>
C++ 模板类型参数
查看>>
C++ 非类型模版参数
查看>>
设计模式 依赖倒转原则 & 里氏代换原则
查看>>
DirectX11 光照
查看>>
图形学 图形渲染管线
查看>>
DirectX11 计时和动画
查看>>
DirectX11 光照与材质的相互作用
查看>>
DirectX11 法线向量
查看>>
DirectX11 兰伯特余弦定理(Lambert)
查看>>
DirectX11 漫反射光
查看>>
DirectX11 环境光
查看>>
DirectX11 镜面光
查看>>
DirectX11 三种光照组成对比
查看>>
DirectX11 指定材质
查看>>
DirectX11 平行光
查看>>
DirectX11 点光
查看>>