首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js对链接里的参数加密解密

在JavaScript中,对URL中的参数进行加密和解密通常是为了保护敏感信息,防止数据在传输过程中被截获或篡改。以下是一些基础概念、优势、类型、应用场景以及如何实现加密和解密的方法。

基础概念

  1. URL参数:URL中?后面的部分,由键值对组成,例如https://example.com/page?param1=value1&param2=value2
  2. 加密:将明文数据转换为不可读的密文,以防止未授权访问。
  3. 解密:将密文数据转换回原始的明文数据。

优势

  • 安全性:保护敏感数据不被未授权的用户查看或修改。
  • 隐私保护:确保用户数据的隐私性,特别是在公共或不安全的网络环境中。

类型

  • 对称加密:使用相同的密钥进行加密和解密,例如AES。
  • 非对称加密:使用一对密钥,一个公钥用于加密,一个私钥用于解密,例如RSA。

应用场景

  • 用户认证:加密用户的会话令牌或身份验证信息。
  • 支付信息:保护用户的支付详情,如信用卡号。
  • 个人信息:保护用户的姓名、地址等敏感信息。

实现方法

以下是一个使用JavaScript的Crypto API进行AES加密和解密的示例:

代码语言:txt
复制
// 加密函数
function encrypt(text, secretKey) {
  const encoder = new TextEncoder();
  const encodedText = encoder.encode(text);
  const cryptoKey = await crypto.subtle.importKey(
    'raw',
    encoder.encode(secretKey),
    { name: 'AES-GCM' },
    false,
    ['encrypt']
  );
  const iv = crypto.getRandomValues(new Uint8Array(12)); // 初始化向量
  const encryptedData = await crypto.subtle.encrypt(
    { name: 'AES-GCM', iv },
    cryptoKey,
    encodedText
  );
  return {
    iv: Array.from(iv),
    data: Array.from(new Uint8Array(encryptedData))
  };
}

// 解密函数
async function decrypt(encryptedData, secretKey) {
  const decoder = new TextDecoder();
  const cryptoKey = await crypto.subtle.importKey(
    'raw',
    new TextEncoder().encode(secretKey),
    { name: 'AES-GCM' },
    false,
    ['decrypt']
  );
  const decryptedData = await crypto.subtle.decrypt(
    { name: 'AES-GCM', iv: new Uint8Array(encryptedData.iv) },
    cryptoKey,
    new Uint8Array(encryptedData.data)
  );
  return decoder.decode(decryptedData);
}

// 使用示例
(async () => {
  const secretKey = 'my-secret-key'; // 应该是一个安全的随机字符串
  const paramValue = 'sensitive-data';
  const encrypted = await encrypt(paramValue, secretKey);
  console.log('Encrypted:', encrypted);

  const decrypted = await decrypt(encrypted, secretKey);
  console.log('Decrypted:', decrypted);
})();

注意事项

  • 密钥管理:确保密钥的安全存储和管理,不要硬编码在代码中。
  • 加密模式:选择合适的加密模式,例如AES-GCM提供了认证加密,可以防止数据被篡改。
  • 初始化向量(IV):对于某些加密模式,如AES-GCM,需要一个随机的IV来保证加密的安全性。

在实际应用中,你可能需要将加密后的数据编码为URL安全的格式,例如Base64,以便在URL中传输。

解决问题的方法

如果在加密或解密过程中遇到问题,可以检查以下几点:

  • 密钥是否正确:确保加密和解密使用的是相同的密钥。
  • IV是否匹配:如果使用了需要IV的加密模式,确保加密和解密时使用的IV相同。
  • 数据格式:确保加密后的数据在传输过程中没有被修改,解密前数据的格式正确。
  • 浏览器兼容性:确保使用的加密API在目标浏览器中得到支持。

如果问题依然存在,可以提供具体的错误信息或行为描述,以便进一步诊断问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于 FaceBook 动态列表加密参数的解密

facebook 的 js, 是将所有的函数封装为固定的格式 _d() , 然后通过固定的函数,通过传递函数名参数调用 ? mark 固定传递参数调用函数: ?..._dyn 和 __s 是需要破解加密的,其他参数都可以在获取用户主页时获取到。..._dyn 参数的加密位置,函数。 这个参数的位置有点恶心。在 URL 中显示为 _dyn 但是实际去查找的时候,会发现只能找到一个 jsmod_key ? ?...需要注意的点,如果你一直进不去 getLoadedModuleHash 方法的话,建议直接刷新一下页面。此处的判断逻辑当参数 _dyn 有值的时候就不会进入。。 __s 参数解密 ?...由 js 生成的 3 个参数拼接而成。 ? 中间的 b 是生成后是固定的,每一个用户会生成不同的 b ,如果你一直抓取的这个是这个用户的话,就不用刷新。

1.7K30

我对Linux里的符号链接(软链接)和硬链接的认识

若是要创建符号链接则需要使用-s 参数 格式是: ln 源文件 链接文件 或者 ln -s 源文件 链接文件 2.区别 首先我创建了a和b文件。...类似于Java里的2个个字符串a和b,它们的值都是“abc”,均指向常量池的同一个地方。所以每当建立一个硬链接时候文件的链接数都会加1。...,以及它们的inode均不同,由此可以得知符号链接是单独的一个文件,它里面存放的内容如下图维基百科:即它文件里存放着源文件的路径,所以inode不同,新建符号链接数时候链接数也不会+1 4.创建硬链接时候源文件必须存在...5.删除硬链接的源文件和符号链接的源文件 删除硬链接的源文件,对硬链接无影响,只要它们的链接数不为0,磁盘上就不会清空文件的内容,文件内容还在,当文件的链接数为0时候,才会被清空。...所以不管修改哪个文件,源文件或者链接文件,文件里的内容都会同步 国外一个参考链接:https://linuxhandbook.com/inode-linux/ 本文共 743 个字数,平均阅读时长 ≈

73430
  • 数据抓取实践:对加密参数及压缩混淆 JS 的逆向分析

    文末附上爬虫 Demo 验证,虽然对于这个案例来说使用 Selenium 可能才是合适的解决方法,但暴力破解才是男人的浪漫!...嗯本文的重点只是在于分析解密的过程。...猜测是一个经过 Base64 编码后的加密参数,事实上的确如此,隔一段时间再利用相同的 analysis 提交请求时会被拒绝。 要解密参数,只能去看 JS 的加密代码。...针对这种模块化开发,一个逆向的思路是,只要查看该模块被引用的情况,不断向上追溯,总能找到最初发起请求和加密的函数。 将网站所有 JS 文件拷贝到本地,检索断点所在的模块名 7GwW ?...通过单步调试后,得出组装的过程,大致步骤如下: 设置一个时间差变量 提取查询参数值(除了 analysis) 排序拼接参数值字符串并 Base64 编码 拼接自定义字符串 自定义加密后再 Base64...需要找到 p.g 的函数本体。 在 Watch 一栏添加 p.g,点击 FunctionLocation 的值,即可跳转到该函数。其实 p.g 同时也是一个解密函数,异或运算经常被用来加解密。

    4.2K11

    如何优雅的实现 Spring Boot 接口参数加密解密?

    加密解密本身并不是难事,问题是在何时去处理?定义一个过滤器,将请求和响应分别拦截下来进行处理也是一个办法,这种方式虽然粗暴,但是灵活,因为可以拿到一手的请求参数和响应数据。...换言之,上面的 AES 加密方法的返回值是一个 Base64 编码之后的字符串,AES 解密方法的参数也是一个 Base64 编码之后的字符串,先对该字符串进行解码,然后再解密。...,哪个接口方法添加了 @Encrypt 注解就对哪个接口的数据加密返回,哪个接口/参数添加了 @Decrypt 注解就对哪个接口/参数进行解密。...(如果不使用该注解就不加密),第二个接口使用了 @Decrypt 所以会对上传的参数进行解密,注意 @Decrypt 注解既可以放在方法上也可以放在参数上。...js 工具来处理加密数据,这个松哥后面有空再和大家说说 js 的加解密。

    2.1K11

    解密 JS 参数:逆向工程的实用技巧

    大部分网站都会对关键参数进行加密,JS 逆向时,我们首要任务是定位参数具体的加密逻辑 常见方式包含:关键字搜索、堆栈调试、XHR 及事件监听、AST 内存漫游、JS Hook 注入等 本篇文章以 JS...Hook 注入定位 Cookie 中某个加密参数为例进行讲解 Cookie 监听 编写一个 Chrome 插件( V3 版本)监听浏览器 Cookie 值的变动,当 Cookie 的 Name 匹配时执行...__lookupSetter__ 对 Cookie 设置注入脚本,手动触发调试 // cookie_hook.js //待匹配的Cookie-Key const targetCookieName = "...浏览器中安装扩展后,打开浏览器开发者工具和目前网站,一旦目标 Cookie 被设定一个值后,会自动进入断点模式 在调试模式下,我们就可以在 Source 面板利用 Call Stack 调用栈一步步查询到加密参数生成的具体逻辑...推荐阅读 如何利用 Selenium 对已打开的浏览器进行爬虫!

    52430

    简述分组密码的加密分组链接模式的工作原理及其特点(密码学移位密码加密解密)

    不同的算法加密模式实时性不同,有的算法可以一边加密一边实时传输和解密,有些则需要等到一个数据块全部接收到了才能进行解密。在不同的应用中,对实时性的要求是不一样的。...初始向量在加密分组链接模式中没有任何保密价值,因为除第一个分组外,加密分组链接中其他分组用来跟明文进行异或的数据都是前面输出的密文分组,而这个密文分组显 然是可以在网络上简单获取的,所以,即便你对初始向量进行保密...所以使用加密分组链接和电子密码本模式都需要确保分组链接的完整性。 加密分组链接模式虽然对抵抗分组重复攻击和分组替换攻击有效,但是很容易受到干扰性的攻击。...一旦某位数据出错,会影响到目前和其后一些字节的加密数据的正确解密,但是对同步错误具有自恢复功能。 数据可以实时传输,每接收到一位都可以随即进行解密。...三重分组加密模式使用了不止一个密钥,对明文分组进行了基于基本分组加密模式的 加密、解密和加密操作。

    2.5K20

    如何在 Spring Boot 中实现在 Request 里解密参数返回的功能?

    在实际的项目开发中,我们经常需要对传递的参数进行加密,在服务端进行解密后再进行处理。本文将介绍如何在 Spring Boot 中实现在 Request 里解密参数返回的功能。1....而非对称加密则是指使用一对不同的密钥进行加密和解密操作,其中一个密钥为公钥,另一个为私钥,公钥可公开,私钥则保持机密。非对称加密相比对称加密更加安全,但是加密速度相对较慢。...3.3 参数拦截器在实现参数解密功能之前,我们需要先定义一个参数拦截器,用于对客户端发送的请求参数进行拦截并进行解密操作。...在本例中,我们对所有请求进行拦截,以确保所有传递的参数都能够进行解密操作。4. 总结本文介绍了如何在 Spring Boot 中实现在 Request 里解密参数返回的功能。...具体实现步骤包括:参数加密、参数解密、参数拦截器和配置拦截器等。需要注意的是,在实际项目中应根据实际业务需求进行调整,以满足不同的需求。

    1.2K21

    js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结

    今天就简单的将加密这块写一下,有可以用到的看一下。 js的加密没特别多的办法,常见的就三种, MD5加密、Base64加密和shal加密,那么今天就将这三种的用法写一下。 MD5加密 H5源码 <!...:"+password); console.log("加密之后的结果是:"+encypass); } else if(e == 2){ console.log("解密之前的结果是...:"+encypass); console.log("解密之后的结果是:"+decryptpass); } } js源码 function Base64...:"+password); console.log("加密之后的结果是:"+encypass); } else if(e == 2){ console.log("解密之前的结果是...:"+encypass); console.log("解密之后的结果是:"+decryptpass); } } js源码 var Base64=

    14.5K30

    对WebPack生成的2.7MB大JS文件进行混淆加密

    JShaman是知名的JS代码保护平台。在线使用,一键混淆加密,无需注册、无需登录。可免费用,也有商业服务;有在线使用的SAAS平台网站,也有本地部署版。很方便、很强大,很专业。...第二步:在浏览器中打开JShaman第三步:上传JS文件文件大小2.7MB,代码内容如下图,由图可见,这不是手工编写的代码,应该是由webpack之类的工具打包生成的,虽然这种代码对于混淆加密不友好,但它也是标准...JS代码,也是可以混淆加密的,只是消耗的时间可能会比一般代码久些。...使用默认配置选项,不做修改:第四步:开始混淆加密JShaman后台开始工作,等待中。...第五步,混淆加密成功经过大约3分钟等待,提交的JS代码混淆加密完成,如下图:加密后的代码变为6.3MB,如下图:那么,这个2.7MB的JS代码就加密完成了。

    51730

    记录一次前端JS加密绕过 | 绕过前端解密的两种方法

    一、背景: 一个银行较小的系统,数据包传输的值加密处理。故扣加解密代码编写脚本,以便测试方便 。 二、坑的由来: 过程: 抓包发现数据加密,意料之中,常规思路寻常分析加密函数。 ?...3.看到是base64js,相直接扣出原版的base64试试,发现base64js是经过二次开发的,加密函数调用的他的方法原版没有。 4.在nodejs上执行不成功,用python调用js执行看下。...利用立即执行特性,返回需要的业务函数或对象,避免每次通过条件判断来处理。 五、分析前端解密的两种方法: 方法一:常规方法 访问x系统,发现系统js 有反调试,设置条件断点绕过反调试。...可发现上图中的l参数就是该数据包请求时的密文 。 在xhr中下断一般直接看堆栈调用。 ? 逐个往下看。在“anonymous”处看到如下: ? 在该处下断,并取消xhr处的断点。重新登录 。...4.在堆栈处逐个往下看,在再第个参数 ‘s’处,发现是加密函数。 ? ?

    4.6K20

    服务器端Go程序对长短链接的处理及运行参数的保存

    对长、短连接的处理策略(模拟心跳) 作为一个可能会和很多Client进行通讯交互的Server,首先要保证的就是整个Server运行状态的稳定性,因此在和Client建立连接通讯的时候,确保连接的及时断开非常重要...将运行参数放入配置文件(XML/YAML) 为了将我们写好的Server发布到服务器上,就要将我们的代码进行build打包,这样如果以后想要修改一些代码的话,需要重新给代码进行编译打包并上传到服务器上。...因此常见的做法都是将Server运行中可能会频繁变更的变量、数值写入配置文件中,这样直接让程序从配置文件读取参数,避免对代码频繁的操作。...,因此我推荐使用第三方的go-yaml包, 地址如下: go-yaml ,go get安装该包后,我们就可以通过他解析文件啦: //解析文件,取出所有参数 func GetYamlConfig...() map[interface{}]interface{}{ data, err := ioutil.ReadFile("config.yaml") //将解析出的参数转为

    1.5K70

    分享几个 Go 语言中使用 RSA 算法对字符串的加密解密的代码片段

    一 生成公钥和私钥 使用随机数据生成器random生成一对具有指定字位数的RSA密钥,生成 RSA 的公钥和私钥,并保存至 key 目录中,入参为加密的位数。...// GenerateRSAKey 函数使用随机数据生成器random生成一对具有指定字位数的RSA密钥,生成 RSA 的公钥和私钥,并保存至 key 目录中,入参为加密的位数。...= nil { return false } } else { return false } return true } 三 使用公钥对字符串进行加密 公钥加密方法,第一个参数为需要加密的字符串...panic(err) } // 返回base64编码字符串 return base64.StdEncoding.EncodeToString(encryptText), nil } 四 使用私钥对已加密的字符串进行解密...私钥解密方法,第一个参数为base64编码的加密字符串,第二个参数为 RSA 私钥字符串。

    37310

    初探js逆向「建议收藏」

    格式化代码后,通过断点一步步查看参数在哪一步骤发生了变化,或在哪一步骤获得的值。一般结果解密可按js执行顺序断点,这篇文章就是一篇典型的结果解密的文章。...而请求参数的加密一般就需要反复断点了,先断点到加密完成(即ajax发送参数值)然后再反复断点一步一步的往上推直到原始参数的传参; (下面就是三尾先生 初探js逆向的原文了,很值得阅读了解练手) 前言...既然网站对这个参数做了加密,说明它不想被爬取,所以可以做个假设:我们的目标数据就是encrypt_data参数里的内容。 有了这个假设,目的就很明确了,只要激活成功教程这个加密参数就行。...不妨思考一下,参数虽做了加密,但网页毕竟要正常显示内容,所以在网页渲染的过程中,一定有个地方对这个参数做了解密,然后将数据写入html。...也就是说,我们需要在网页渲染的过程里,一步步观察,看看到底是哪个位置对这个参数做了解密。 在开发者工具里的Sources选项卡中,可以找到这个网页的js文件夹,界面右侧有断点调试栏。

    1.9K30

    Python网络爬虫之数美滑块的加密及轨迹~~动态js参数分析

    ,但是却很少人告诉你,它的js好像是一周更新一次,更新之后post的参数key和des的key会变,混淆的js结构也会变,现在我准备说的就是分析动态的参数和des加密的key值。...js里搞出来(我用的正则匹配)大佬们都用ast的 可是我不会啊,难顶。...获得解密函数 整个js可以看为两个部分,第一部分就是写一个解密函数 你传一个整数过来 减一个整数 再把结果给大数组当下标返回一个字符串,上面那些要解密的都调用这个函数就行。...:", get_arrayValue_FcuntionName) 这样把解密函数的js和函数名都获取到了,那下一步就匹配参数了。...2位数的明文参数就不说了 循环 然后下标0就是。然后有的下标2有值(16进制的参数) 有的是直接下标3有值(明文des的密钥) 写个判断 然后上面不是定义了js函数和获得了解密的js函数名吗?

    85910

    【2021-09-07】JS逆向之空气质量历史数据查询

    ,数据加密 ---- 一、页面分析 打开网页后,f12调用开发者工具,弹出提示框 解决办法:点这玩意设置里直接打开开发者工具,或者新开一个网页,f12再进链接 然后成功打开了,页面马上段住...window.innerHeight = 1024; window.clearInterval(handler); ---- 二、数据获取 解决完反调试后,再下一个xhr断点,这里段住,可以看出请求参数和加密的数据...网上跟就可以看到加密的函数 自然解密的js也在这个里面 这个请求的js 就包含了上面动态的加解密js,文件链接在页面源码里 还有些解密用到的函数,都在一开始的eval...里,直接扣下来就行 然后最麻烦的就是怎么获取动态的js了,经测试发现,这个网站没10分钟会动态一次js,且都在xx:x5时间点上,所以调试的时候尽量保存在本地,除非你10分钟就可以搞出来 他的js加密大致有三四套的样子...,有直接eval就出js的,还有一次bs64解密跟两次bs64解密后出来的,这些都不重要,之后就写个正则匹配那些调用的方法即可 三、总结 直接eval出js 一次bs64解密 两次bs64

    52420

    C++实现对16进制字符串和字节数组的tea加密和解密算法

    ,生成对应的加密和解密DLL接口文件,然后供Java项目调用。...************************************/ // 加密核心函数 // v为需要加密的数据 // k为加密的密钥 // round为加密的轮数,和解密相对应 void tea_encode...// v为需要解密的数据 // k为解密的密钥 // round为解密的轮数,和加密相对应 void tea_decode(int32 * v, const int32 * k, int round)...**********************/ // 加密核心函数 // v为需要加密的数据 // k为加密的密钥 // round为加密的轮数,和解密相对应 void tea_encode(int32...// v为需要解密的数据 // k为解密的密钥 // round为解密的轮数,和加密相对应 void tea_decode(int32 * v, const int32 * k, int round)

    2.6K00
    领券