当前位置: 首页 > news >正文

前端密码加密 —— bcrypt、MD5、SHA-256、盐

 🐔 前期回顾f8e3cc1a0f694ac2b665ca2ad14c49d7.png悄悄告诉你:前端如何获取本机IP,轻松一步开启网络探秘之旅_彩色之外的博客-CSDN博客前端获取 本机 IP 教程https://blog.csdn.net/m0_57904695/article/details/131855907?spm=1001.2014.3001.5501

          在前端密码加密方案中,bcrypt与SHA-256都是常见的加密算法,它们各有优劣。

首先,bcrypt是一种专门用于密码哈希的算法,并且包含了自带的盐。它使用Salt和Cost参数来控制哈希的复杂程度。bcrypt的主要优点是它的计算成本可调节,可以增加破解密码的难度。这意味着即使密码遭到泄露,攻击者也需要花费很长时间和大量计算资源进行破解。因此,bcrypt常常被认为是一种更安全的密码哈希算法。

           其次,SHA-256是一种常用的加密散列函数,广泛应用于密码学和数据完整性验证领域。与bcrypt不同,SHA-256并不自带盐,因此你需要自行生成和存储盐值。SHA-256的计算速度相对较快,但不具备计算成本调节的功能。这意味着,如果密码遭到泄露,攻击者可以使用现代硬件和技术快速破解较弱的密码。

         综上所述,如果你关注密码的安全性,推荐使用bcrypt作为密码加密算法。bcrypt自带盐,并且计算成本可调节,能有效增加破解密码的难度。对于bcrypt来说,你不需要自行生成盐值,它会在哈希过程中自动处理。

        然而,在前端密码加密方案中,加密只是整个安全体系的一部分。你还需要考虑其他方面的安全性,比如传输的加密、防止XSS攻击、账号锁定等等。因此,在设计密码加密方案时,请综合考虑所有安全要素,并遵循最佳实践。

   

    安全性不仅取决于哈希算法本身,还取决于其使用方式和上下文。

目录

😷 MD5

🛹 SHA-256 + 盐值

🤖 源码位置

🌍 bcrypt (推荐)

😷  谢谢观看


😷 MD5

        MD5是一种广泛用于数据校验和加密的算法。它接受一个输入(通常是消息或数据)并生成一个128位(16字节)的哈希值作为输出。

MD5算法通过将输入数据分成固定大小的块,并对每个块进行一系列的运算来生成哈希值。生成的哈希值具有以下特点:

1. 不可逆性:无法从哈希值反推出原始输入数据。


2. 相同输入生成相同哈希值:对于相同的输入数据,无论执行多少次,都会生成相同的哈希值。


3. 哈希冲突可能性:不同的输入数据可能会生成相同的哈希值,这称为哈希冲突。

        由于MD5算法存在一些安全漏洞,例如容易被碰撞攻击和预映像攻击,因此不再推荐用于安全敏感的应用。在需要更高级别的数据安全性时,推荐使用更强大和安全性更高的哈希算法,如SHA-256、SHA-512等。

🛹 SHA-256 + 盐值

        SHA-256(Secure Hash Algorithm 256-bit)是一种密码学安全散列函数,它接受任意长度的输入数据,并生成一个256位(32字节)的哈希值作为输出。

       SHA-256是SHA-2系列中的一种算法,是SHA-224和SHA-512之间的中间版本。它是由美国国家安全局(NSA)设计,广泛应用于数据完整性校验、数字签名、密码学协议等领域。

       与MD5相比,SHA-256提供了更高的安全性和更好的抗碰撞能力。它具有以下特点:

1. 不可逆性:无法从哈希值反推出原始输入数据。


2. 相同输入生成相同哈希值:对于相同的输入数据,无论执行多少次,都会生成相同的哈希值。


3. 哈希冲突可能性极低:不同的输入数据生成相同哈希值的可能性极低,可以被认为是可以忽略不计的。

       SHA-256广泛应用于密码学和信息安全领域,例如在数字证书、SSL/TLS握手过程、密码存储和验证等方面。它提供了更强大的数据完整性保护和安全性,是目前常用的哈希算法之一。

          加盐是指在密码哈希过程中引入一个随机生成的字符串,称为盐(salt),并将其与密码进行组合后再进行哈希计算。这个盐值会与每个用户的密码单独关联,并且将其存储在数据库中。 加盐可以增加密码哈希的复杂度,提高密码的安全性,即使两个用户使用相同的密码,由于使用了不同的盐值,其哈希结果也会有所区别。这样即使黑客获得了哈希值,也很难通过暴力破解找到原始的密码。

1:首先,安装 js-sha256库: 

pnpm install js-sha256

2:在您的Vue组件中引入js-sha256 

import { sha256 } from 'js-sha256';

3:在需要使用SHA256哈希的地方,调用 sha256 函数并加盐,传入要哈希的字符串作为输入:

import { sha256 } from 'js-sha256';const generateSalt = () => {const randomBytes = new Uint8Array(16);crypto.getRandomValues(randomBytes);return Array.from(randomBytes, (byte) =>byte.toString(16).padStart(2, '0')).join('');
};const salt = generateSalt();
console.log('!这里输出 🚀 ==>:', salt);const password = 'userPassword';
const saltedPassword = salt + password;
const hashedPassword = sha256(saltedPassword);
console.log('!这里输出 🚀 ==>:', hashedPassword);

可以将其用作数据验证、密码存储等用途,关于安全性,除了使用 js-sha256 库之外,还建议采取以下措施:

  • 使用HTTPS协议来保护传输数据的安全性。
  • 在前端进行输入验证和过滤,以确保只有有效和合法的数据被传递给哈希函数。
  • 对于密码存储和认证,最好使用专门的密码哈希函数和密码学方案,如bcrypt、scrypt或Argon2等。
  • 仔细保护密钥和敏感数据,避免将它们明文存储在前端代码或客户端浏览器中。

 SHA256哈希函数本身并不能防止所有安全问题,还需要综合考虑其他因素来确保系统的安全性,如合理的安全策略、用户身份验证和授权等。

🤖 源码位置

🌍 bcrypt (推荐)

pnpm install bcrypt

请确认您使用的 NodeJS 版本是稳定版本;目前不支持不稳定版本,使用不稳定版本时创建的问题将被关闭。

请至少升级到 v5.0.0  bcrypt依赖

import bcrypt from 'bcrypt';/*** 生成哈希密码* @param myPlaintextPassword 明文密码* @param saltRounds 盐值生成的轮数,默认为10* @returns 哈希密码*/
export const returnBcrypt = (myPlaintextPassword: string, saltRounds?: number): string => {// 技术 1(在单独的函数调用上生成盐和哈希):// const salt = bcrypt.genSaltSync(saltRounds);// const hash = bcrypt.hashSync(myPlaintextPassword, salt);// 技术 2(自动生成盐和哈希):const hash = bcrypt.hashSync(myPlaintextPassword, saltRounds);return hash;
};

 🤖 源码位置

 

😷  谢谢观看

7730e2bd39d64179909767e1967da702.jpeg

 _______________________________  期待再见  _______________________________

相关文章:

前端密码加密 —— bcrypt、MD5、SHA-256、盐

🐔 前期回顾悄悄告诉你:前端如何获取本机IP,轻松一步开启网络探秘之旅_彩色之外的博客-CSDN博客前端获取 本机 IP 教程https://blog.csdn.net/m0_57904695/article/details/131855907?spm1001.2014.3001.5501 在前端密码加密方案中&#xff…...

汽车UDS诊断深度学习专栏

1.英文术语 英文术语翻译Diagnostic诊断Onboard Diagnostic 在线诊断 Offboard Diagnostic离线诊断Unified diagnostic service简称 UDS 2.缩写表 缩写解释ISO国际标准化组织UDSUnified diagnostic service,统一的诊断服务ECU电控单元DTC 诊断故障码 ISO14229UD…...

macOS 下安装brew、nvm

1、brew: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" brew -v 查看版本 示例: 安装jdk brew search jdk 查询可用的jdk版本 brew install openjdk11 安装制定版本jdk 更换源&#xff1…...

【云原生】Kubernetes工作负载-StatefulSet

StatefulSet StatefulSet 是用来管理有状态应用的工作负载 API 对象 StatefulSet 用来管理某 Pod 集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符 和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同…...

Java:方法的重载

方法重载 为什么需要方法重载 在使用方法的过程中我们可能会遇到以下如同例子的情形: ​ ​ public class method1 {public static void main(String[] args) {int a1 10;int b1 20;double ret1 add(a1, b1);System.out.println("ret1 " ret1);do…...

7.react useCallback与useMemo函数使用与常见问题

react useCallback与useMemo函数使用与常见问题 useCallback返回一个可记忆的函数,useMemo返回一个可记忆的值,useCallback只是useMemo的一种特殊形式。 那么这到底是什么意思呢?实际上我们在父子通信的时候,有可能传递的值是一…...

Sentinel限流中间件

目录 介绍 Sentinel 的特征 Sentinel 的组成 实战使用 简单实例 配置本地控制台 使用可视化ui配置简单流控 配置异步任务限流 使用注解定义限流资源 SpringCloud整合Sentinel 简单整合 并发线程流控 关联模式 整合openFeign使用 介绍 随着微服务的流行&#xff0…...

使用ajax进行前后端交互的方法

使用ajax进行前后端交互的方法:(我只测试通了json对象作为参数的方式,其他方式我没有测试通过) 1、前端方法: 传参方式:POST 请求类型:json对象 响应类型:json对象 function test() …...

动手学深度学习——线性回归从零开始

生成数据集synthetic_data()读取数据集data_iter()初始化模型参数w, b定义模型:线性回归模型linreg()定义损失函数:均方损失squared_loss()定义优化算法:梯度下降sgd()进行训练:输出损失loss和估计误差 %matplotlib inline impor…...

Redis缓存击穿

Redis缓存击穿是指在使用Redis作为缓存时,某个热点数据过期或不存在,导致大量请求直接打到后端存储系统(例如数据库),使得后端系统压力骤增,性能下降的情况。这种情况通常发生在热点数据失效的瞬间。 缓存…...

网络安全(黑客)自学的一些建议

1.选择方向 首先是选择方向的问题,网络安全是一个很宽泛的专业,包含的方向特别多。比如 web安全,系统安全,无线安全 ,二进制安全,运维安全,渗透测试,软件安全,IOT安全&a…...

全志F1C200S嵌入式驱动开发(基于usb otg的spi-nor镜像烧入)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面既然已经搞定了spi-nor驱动,那么下一步考虑的就是怎么从spi-nor flash上面加载uboot、kernel和rootfs。目前spi-nor就是一块白片,上面肯定什么都没有,那么这个时候,我们要做…...

如何恢复损坏/删除的 Word 文件

有关如何修复不可读的 Microsoft Word 文件或 Rich Text 文件中的文本的分步说明。这些说明有助于从损坏的*.doc、*.docx、*.dot、*.dotx、*.rtf文件(任何版本和大小)中提取文本,只需单击几下: 从此处下载奇客数据恢复 &#xff…...

【论文阅读】Feature Inference Attack on Shapley Values

摘要 研究背景 近年来,解释性机器学习逐渐成为一个热门的研究领域。解释性机器学习可以帮助我们理解机器学习模型是如何进行预测的,它可以提高模型的可信度和可解释性。Shapley值是一种解释机器学习模型预测结果的方法,它可以计算每个特征对…...

TDesign 中后台系统搭建

目录 1 模板安装2 启动项目3 添加页面总结 一般如果希望开发小程序,是要给使用的用户提供一套中后台系统来管理数据的。现在中后台系统开源项目也比较多,本篇我们介绍一个腾讯开源的TDesign模板。 1 模板安装 先要在电脑里安装好nodejs,搜索…...

Android 实现阅读用户协议的文字控件效果

开发中&#xff0c;经常要用到一些阅读隐私协议的场景&#xff0c;原生的textview控件很难做到在一个控件里有两个点击事件&#xff0c;那现在就来安利一个强大的组件——SpannableStringBuilder。 先看看效果&#xff1a; 直接上代码&#xff0c;布局文件&#xff1a; <Li…...

19.主题时钟

主题时钟 html部分 <div class"btn">黑色</div><div class"clock-container"><div class"time">21</div><div class"date">21</div><div class"clock"><div class&qu…...

ChatGPT在智能电子设备中的应用如何?

ChatGPT在智能电子设备中有着广泛的应用潜力&#xff0c;可以为电子设备提供更智能、更个性化的用户体验&#xff0c;并为用户提供更多便利和高效的功能和服务。智能电子设备是指通过集成计算机、传感器、网络和人工智能等技术&#xff0c;实现智能化的功能和交互的设备。ChatG…...

MGRE之OSPF实验

目录 题目&#xff1a; 步骤二&#xff1a;拓扑设计与地址规划​编辑 步骤三&#xff1a;IP地址配置 步骤四&#xff1a;缺省路由配置 步骤五&#xff1a;NAT的配置 步骤六&#xff1a;MGRE配置 中心站点R1配置 分支站点配置 中心站点R5 R1配置 分支站点配置 检测&…...

【Selenium+Pytest+allure报告生成自动化测试框架】附带项目源码和项目部署文档

目录 前言 【文章末尾给大家留下了大量的福利】 测试框架简介 首先管理时间 添加配置文件 conf.py config.ini 读取配置文件 记录操作日志 简单理解POM模型 简单学习元素定位 管理页面元素 封装Selenium基类 创建页面对象 简单了解Pytest pytest.ini 编写测试…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...