密码安全及前端字符串加密的几种方法

您所在的位置:网站首页 字符串简单的加密和解密 密码安全及前端字符串加密的几种方法

密码安全及前端字符串加密的几种方法

2024-07-12 23:15:34| 来源: 网络整理| 查看: 265

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天,点击查看活动详情。

身份验证过程中会涉及到密钥, 对称加密,非对称加密,摘要的概念:

密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。 对称加密:对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有 DES、3DES、TDEA、Blowfish、RC5 和 IDEA。 非对称加密:非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。 摘要:摘要算法又称哈希/散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用 16 进制的字符串表示)。算法不可逆。 加盐

对于密码存储来说,必然是不能明文存储在数据库中的,否则一旦数据库泄露,会对用户造成很大的损失。并且不建议只对密码单纯通过加密算法加密,因为存在彩虹表的关系

通常需要对密码加盐,然后进行几次不同加密算法的加密 // 加盐也就是给原密码添加字符串,增加原密码长度 sha256(sha1(md5(salt + password + salt)))

但是加盐并不能阻止别人盗取账号,只能确保即使数据库泄露,也不会暴露用户的真实密码。一旦攻击者得到了用户的账号,可以通过暴力破解的方式破解密码。对于这种情况,通常使用验证码增加延时或者限制尝试次数的方式。并且一旦用户输入了错误的密码,也不能直接提示用户输错密码,而应该提示账号或密码错误

token的加密:jwt 举例:

需要一个 secret(随机数) 后端利用 secret 和加密算法(如:HMAC-SHA256)对 payload(如账号密码) 生成一个字符串(token),返回前端 前端每次 request 在 header 中带上 token 后端用同样的算法解密 前端加密

虽然前端加密对于安全防护来说意义不大,但是在遇到中间人攻击的情况下,可以避免明文密码被第三方获取

看几种常见的前端字符串加密方法:

1. base64

Base64能够将任何数据转换为易移植的字符串,避免了传输过程中失真问题。

最初,Base64是为了解决电子邮件中无法直接使用非ASCII字符的问题。一段数据先经过Base64编码为ASCII字符串后,可以在接收端,通过Base64解码还原为原数据后,而无需担心传输过程中失真。

使用示例

window.atob() 与window.btoa()可以实现对base64格式的数据进行解码和编码,其兼容性是主流浏览器,IE10及以上。 window.atob(encodedStr)只可以解码用btoa方法编码的字符串。 window.btoa():将ascii字符串或二进制数据转换成一个base64编码过的字符串,但该方法不能直接作用于Unicode字符串 var str64 = window.btoa("hello"); console.log("字符串是:"+str); console.log("经base64编码后:"+str64); console.log("base64解码后:"+window.atob(str64));

准确来说Base64并不是一种加密方式,明文使用Base64编码后的字符串通过索引表可以直接还原为明文。Base64只能作为一种数据的存储格式。

只是很多时候,我们都将Base64编码作为数据加密后的传输 / 存储格式。例如,一段明文数据通过MD5 、SHA等手段加密后,经过Base64编码为字符串,就可以很方便地进行传输 & 存储。

2. MD5加密(不可逆)

MD5.js是通过前台js加密的方式对用户信息,密码等私密信息进行加密处理的工具,也可称为插件。

使用

MD5共有6种加密方法:

hex_md5(value) b64_md5(value) str_md5(value) hex_hmac_md5(key, data) b64_hmac_md5(key, data) str_hmac_md5(key, data) var code = "123456"; var username = "123456"; var password = "123456"; var str1 = hex_md5("123456"); var str2 = b64_md5("123456"); var str3 = str_md5("123456"); var str4 = hex_hmac_md5(code,code); var str5 = b64_hmac_md5(username,username); var str6 = str_hmac_md5(password,password); console.log(str1);     // e10adc3949ba59abbe56e057f20f883e console.log(str2);     // 4QrcOUm6Wau+VuBX8g+IPg console.log(str3);     // áÜ9IºY«¾VàWò��> console.log(str4);     // 30ce71a73bdd908c3955a90e8f7429ef console.log(str5);     // MM5xpzvdkIw5VakOj3Qp7w console.log(str6);     // 0Îq§;Ý��9U©��t)ï MD5是一种广泛使用的散列算法。 MD5不能算是加密算法,而是一种信息的摘要算法。只是其简单易用,广为流传,被误传为一种加密算法。 MD5是不可逆的,没有解密算法。但是现在有很多暴力破解的方法也可以搭配使用。 3. sha1加密(不可逆)

sha1安全散列算法,现在以继称为公认的最安全的散列算法之一,并广泛使用。

sha1的一种数据加密算法,算法思想的接收一段明文,然后以一种不可逆的方式将它转化为(通常更小)的密文,也可以简单的理解为提取一串输入码(称为预映射或信息)。并把它们转为为长度较短、位数固定的输出序列即散序值(也称为信息摘要或信息认证代码)的过程。

 var sha1_1 = sha1("mosquito~");  console.log(sha1_1);  var sha1_2 = sha1("admin:1001");  console.log(sha1_2); MD5相比与SHA1最显著和最重要的区别是SHA1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA1则是2^160数量级的操作。 这样,SHA1对强行攻击有更大的强度。 相对的在相同的硬件上,SHA1的运行速度比MD5慢。 但是就目前的情况来看,SHA1也很容易被攻破,为了安全起见,可以选择诸如SHA256,SHA512等高强度的算法来提升安全性。 4. AES/DES加密解密

自从有了AES后DES就逐渐退出历史舞台了,这里就不多赘述了。

AES(Advanced Encryption Standard),AES加密算法是密码学中的高级加密标准。是一种最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。AES采用对称分组密码体制,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。

import CryptoJS from "crypto-js"; const key = CryptoJS.enc.Utf8.parse("1234567890abc765"); //16位 const iv = CryptoJS.enc.Utf8.parse("1234567890000000"); // AES加密 export function Encrypt(word,keyStr,ivStr){    let key = KEY, iv = IV, srcs, encrypted;    if (keyStr) { key = CryptoJS.enc.Utf8.parse(keyStr);     iv= CryptoJS.enc.Utf8..encrypt(ivStr); }      srcs= CryptoJS.enc.Utf8.parse(word);      encrypted= CryptoJS.AES.encrypt(srcs, key, {        iv: iv,        mode: CryptoJS.mode.EBC,        padding: CryptoJS.pad.Pkcs7     });    return CryptoJS.enc.base64.stringify(encrypted.ciphertext); //返回base64格式密文 },    // AES解密 export function Decrypt(word,keyStr,ivStr){ let key = KEY, iv = IV, base64, src, decrypt, decryptedStr;    if (keyStr) { key = CryptoJS.enc.Utf8.parse(keyStr);     iv= CryptoJS.enc.Utf8..encrypt(ivStr); }    base64 = CryptoJS.enc.Base64.parse(word);    src = CryptoJS.enc.Base64.stringify(base64);    decrypt = CryptoJS.AES.decrypt(srcs, key, {      iv: iv,      mode: CryptoJS.mode.ECB,      padding: CryptoJS.pad.Pkcs7   });    decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);    return decryptedStr.toString(); }

【注】:加密的时候必须转成字符串 使用toString。 解密的时候 必须使用utf8的格式

使用:

import { Encrypt } from "crypto"; let newPassword = Encrypt(password);


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭