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失败任务处理与监控