JavaScript如何实现字符串加密_常见的哈希算法有哪些
发布时间 - 2025-12-27 00:00:00 点击率:次JavaScript无原生字符串加密,哈希(如SHA-256)仅用于不可逆摘要,密码存储等;真正可逆加密需用Web Crypto API的AES-GCM等对称算法。
JavaScript本身不提供原生的字符串加密功能,但可以通过哈希算法实现不可逆的“摘要”处理(注意:哈希 ≠ 加密,它不可解密)。若需真正加密(可逆),应使用AES等对称算法,配合Web Crypto API。
哈希不是加密,但常被误用作“简易加密”
哈希是单向运算:相同输入永远得到相同输出,但无法从结果反推原文。它适合密码存储、数据校验,不适合保护敏感明文(如API密钥、用户消息)。常见误区是用MD5或SHA-1存密码——这已不安全。
- MD5:输出128位,碰撞严重,禁止用于安全场景
- SHA-1:输出160位,已被证实可碰撞,已淘汰
- SHA-256 / SHA-512:属SHA-2系列,目前广泛推荐,Web Crypto原生支持
- SHA-3(如SHA3-256):更新标准,抗碰撞性更强,部分浏览器支持
用Web Crypto API做安全哈希(现代推荐方式)
这是浏览器内置的安全API,无需第三方库,支持SHA-256、SHA-512等。注意:只能处理Uint8Array,需先将字符串转为UTF-8字节数组。
async function hashString(str) {
const encoder = new TextEncoder();
const data = encoder.encode(str);
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
// 使用示例
hashString("hello").then(console.log); // 输出64位十六进制字符串
需要真正加密?选AES-GCM(可逆+认证)
如果目标是“加密后还能解密”,比如前端加密上传内容,必须用对称加密。Web Crypto支持AES-GCM(带完整性校验,更安全):
- 需生成随机密钥(
crypto.subtle.generateKey)和IV(初始化向量) - 密钥不能硬编码,应由服务端分发或派生(如用PBKDF2)
- 加密结果包含密文+IV+认证标签,三者缺一不可
- 不建议自行实现加解密逻辑,优先复用成熟方案(如aes-js或Web Crypto封装库)
简单场
景可用第三方库(非安全关键时)
开发调试或内部工具中,若不涉及高敏数据,可临时用轻量库快速验证:
- crypto-js:支持MD5/SHA1/SHA256/AES,语法简洁,但注意其SHA-256非Web Crypto级安全(无侧信道防护)
- js-sha256:纯JS实现,无依赖,适合极简环境
- ⚠️ 所有纯JS实现比Web Crypto慢且可能有安全缺陷,生产环境密码类操作务必用
crypto.subtle
# javascript
# java
# js
# 前端
# 编码
# 浏览器
# 字节
# 工具
# ai
# crypto
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
深圳网站制作的公司有哪些,dido官方网站?
魔方云NAT建站如何实现端口转发?
Android okhttputils现在进度显示实例代码
Laravel如何处理和验证JSON类型的数据库字段
jQuery中的100个技巧汇总
iOS发送验证码倒计时应用
Laravel如何实现API版本控制_Laravel版本化API设计方案
高防服务器租用如何选择配置与防御等级?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
如何在建站主机中优化服务器配置?
QQ浏览器网页版登录入口 个人中心在线进入
如何在云主机上快速搭建多站点网站?
5种Android数据存储方式汇总
如何快速搭建高效可靠的建站解决方案?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
Laravel怎么上传文件_Laravel图片上传及存储配置
如何在橙子建站中快速调整背景颜色?
如何快速使用云服务器搭建个人网站?
太平洋网站制作公司,网络用语太平洋是什么意思?
如何在宝塔面板中修改默认建站目录?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
b2c电商网站制作流程,b2c水平综合的电商平台?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
高防服务器如何保障网站安全无虞?
如何在IIS中新建站点并配置端口与IP地址?
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
如何快速生成凡客建站的专业级图册?
Laravel如何使用模型观察者?(Observer代码示例)
如何在Windows环境下新建FTP站点并设置权限?
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
如何在IIS中新建站点并配置端口与物理路径?
英语简历制作免费网站推荐,如何将简历翻译成英文?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel观察者模式如何使用_Laravel Model Observer配置
网站制作大概多少钱一个,做一个平台网站大概多少钱?
Python文件流缓冲机制_IO性能解析【教程】
利用vue写todolist单页应用
PHP 500报错的快速解决方法
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何在 Pandas 中基于一列条件计算另一列的分组均值
如何在VPS电脑上快速搭建网站?
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控


景可用第三方库(非安全关键时)