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

网站建设网络推广销售机械公司网站模板

网站建设网络推广销售,机械公司网站模板,wordpress重置密码,wap类网站安全解码base64 为什么前端需要安全解码base64atob安全解码base64前端页面之间传递标准base64安全解码失败遇到的问题重定向后,从url获取base64解析失败问题 为什么前端需要安全解码base64 在javascript中,标准的base64是一个连续的字符串,只…

安全解码base64

    • 为什么前端需要安全解码base64
    • atob安全解码base64
    • 前端页面之间传递标准base64
    • 安全解码失败遇到的问题
      • 重定向后,从url获取base64解析失败问题

为什么前端需要安全解码base64

在javascript中,标准的base64是一个连续的字符串,只包括(A-Z、a-z、0-9、+、/),不包含空格或其他非Base64字符,根据Base64编码的规则,每4个字符一组,如果最后一组不足4个字符,需要用=填充(如果最后一组只有一个字符就需要填充3个=号,如果是Base64URL编码,这些字符可能会被省略)。在URL中,+被用作空格的编码,而/是URL的路径分隔符。因此,在将Base64编码的数据放入URL中时,通常会使用-和_分别替换+和/,。这种编码被称为Base64 URL编码或Base64URL。

atob安全解码base64

// base64Str是需要解码的base64
function urlSafeBase64Decode(base64Str){// 将URL安全的Base64字符替换为标准Base64字符let str = base64Str;if (base64Str.indexOf("-") > -1 || base64Str.indexOf("_") > -1) {str = base64Str.replace(/-/g, "+").replace(/_/g, "/");}const pad = str.length % 4;if (pad) {str += new Array(4 - pad).fill("=").join("");}// 使用window.atob()解码字符串const binaryStr = window.atob(str);// 解析中文const bytes =  Uint8Array.from(binaryStr, (m) => m.codePointAt(0));// 使用TextDecoder将二进制数据解码为UTF-8字符串const decoder = new TextDecoder("utf-8");const utf8Str = decoder.decode(bytes);return utf8Str;};

前端页面之间传递标准base64

需要使用encodeURIComponent和decodeURIComponent,对参数编码和解码,编码过后的base可以使用URLSearchParams来获取参数

let url = "https://xxxx/page?data=" + encodeURIComponent("标准base64"); // "Some binary data"的Base64编码// 使用URL对象解析URL
let urlObj = new URL(url);
let params = new URLSearchParams(urlObj.search);// 获取并解码Base64参数
let base64Data = decodeURIComponent(params.get("data"));// 现在你可以安全地使用base64Data了
let decodedData = window.atob(base64Data);

安全解码失败遇到的问题

浏览器控制台报错: Failed to execute ‘atob’ on ‘Window’: The string to be decoded is not correctly encoded. 都是因为传入atob()的参数不是标准的base64

重定向后,从url获取base64解析失败问题

服务端:在url上返回标准的base64编码,含有+和/符号,前端使用new URLSearchParams()来获取参数值,会将字符串中的+号替换成空格,导致解析失败。同时url上使用标准的base64,在使用window.location.href重定向后,服务端接收到的是编译后的字符串

解决方式:
1、服务端返回安全base64 ( 上文提到的Base64 URL ) --(推荐)
2、前端使用字符串分割的方式获取

const getUrlSplitParams = (url, key) => {const [_, params] = url.split('?')const paramsArr = params.split('&')const newParams = {}paramsArr.forEach((item) => {const [key, value] = item.split('=')newParams[key] = value})if (key) {return newParams[key]}return newParams
}
http://www.dtcms.com/a/579090.html

相关文章:

  • [Ai Agent] 07 RAG 进阶:持久化 · 精排序 · Agent 集成
  • 网站如何建设成直播间wordpress 中文包
  • 网站网页设计的组成网页设计师需要掌握的领域
  • 养殖推广网站怎么做来个网站好人有好报2024
  • 平台设计网站公司电话品牌建设金点子
  • 集成食物营养识别,打造智能健康管理应用
  • 免费行情网站大全织梦网站模板怎么用
  • 观远BI赋能跨境电商系列(一)|告别糊涂账,算清跨境利润、管透资金风险、实现精益增长
  • 9.【NXP 号令者RT1052】开发——实战-看门狗
  • 重启虚拟机后,静态IP地址通过ip addr无法查看,也就无法实现远程连接 ---- 兜底解决方案
  • 【HarmonyOS NEXT】内存泄漏防护:常见场景与解决方案
  • 制作类网站手机网站域名和pc域名的区别
  • 做视频网站需要流媒体吗国内高清视频素材网站
  • 基于高斯伪谱法的弹道优化方法及轨迹仿真计算
  • 怎么给网站做自适应wordpress.重装
  • 建设网站模块需要哪些google浏览器下载安装
  • 中山半江红网站建设重庆建工集团建设网站
  • 长尾识别BBN方法
  • 如何在Typora中嵌入视频
  • 三轴云台之多维度协同技术
  • 企业如何建公司网站网页模版比较出名的网站
  • 区块链媒体网站建设培训机构网页设计模板
  • 嵌入未来,公式无限
  • DICOM文件厚度信息的作用
  • 皇岗网站建设广东各地最新病例
  • 做网站的人能看到浏览的人的信息吗自驾游网站模板
  • 用七牛做网站公司做网站买服务器多少钱
  • 衡水网站优化推广城乡建设部网站广州市
  • 山东天成建设工程有限公司网站网站建设基础考试
  • 从Python到仓颉:核心项目内容迁移实践