星驰编程网

免费编程资源分享平台_编程教程_代码示例_开发技术文章

本篇文章跟大家分享关于对称加密---RSA算法

本篇文章跟大家分享关于对称加密---RSA算法

RSA算法

核心特点:

1.双密钥机制 RSA 使用一对密钥:公钥和私钥。

  • 公钥(公开)用于加密数据。
  • 私钥(保密)用于解密数据,或者用于签名,而公钥则用来验证签名。
  • RSA使用公钥和私钥两把密钥。
  • 公钥(公开)用于加密数据,私钥(保密)用于解密数据或者私钥用于签名,公钥用于验证签名。

2.主要用途

  • 加密通信:保护敏感信息在互联网上的传输
  • 数字签名:验证消息或文件的真实性和完整性。
  • 密钥交换:在加密协议(如TLS/SSL)中用作密钥交换的一部分。

实战案例

  • 目标网址

aHR0cHM6Ly9wYXNzcG9ydC5mYW5nLmNvbS8/YmFja3VybD1odHRwcyUzQSUyRiUyRm50LmZhbmcuY29tJTJG

1.加密参数接口查找

首先打开浏览器的开发者工具,切换到“网络”选项卡。输入账号和密码后,点击登录按钮前,先清除网络日志记录,然后点击登录。这样可以更清晰地捕获请求中的加密参数。

2.通过加密参数定位加密位置

通过全局搜索关键字pwd,最终定位到加密参数生成的位置如下:

可以看出,pwd 参数是由 encryptedString 函数生成的。这个函数需要传入两个参数:一个是加密密钥对象,另一个是明文密码。为了明确这两个参数的具体值,可以在控制台打印出来查看。

经过分析发现,第一个参数是一个对象,而不是简单的字符串。因此需要进一步查找 key_to_encode 的定义。

key_to_encode 值如下:

        var key_to_encode = new RSAKeyPair("010001", "", "978C0A92D2173439707498F0944AA476B1B62595877DD6FA87F6E2AC6DCB3D0BF0B82857439C99B5091192BC134889DFF60C562EC54EFBA4FF2F9D55ADBCCEA4A2FBA80CB398ED501280A007C83AF30C3D1A142D6133C63012B90AB26AC60C898FB66EDC3192C3EC4FF66925A64003B72496099F4F09A9FB72A2CF9E4D770C41");

3.本地还原加密参数

首先鼠标移动到encryptedString函数上,然后鼠标点击js文件。

接下来把encryptedString整个函数复制下来,


password = "admin123"

key_to_encode = new RSAKeyPair("010001", "", "978C0A92D2173439707498F0944AA476B1B62595877DD6FA87F6E2AC6DCB3D0BF0B82857439C99B5091192BC134889DFF60C562EC54EFBA4FF2F9D55ADBCCEA4A2FBA80CB398ED501280A007C83AF30C3D1A142D6133C63012B90AB26AC60C898FB66EDC3192C3EC4FF66925A64003B72496099F4F09A9FB72A2CF9E4D770C41");

function encryptedString(n, t) {
    var e, o, s, h, c, i, f, u, v, l, y;
    if (n.chunkSize > n.digitSize - 11)
        return "Error";
    for (var a = [], p = t.length, r = 0; r < p; )
        a[r] = t.charCodeAt(r),
        r++;
    for (e = a.length,
    o = "",
    r = 0; r < e; r += n.chunkSize) {
        for (c = new BigInt,
        s = 0,
        f = r + n.chunkSize > e ? e % n.chunkSize : n.chunkSize,
        u = [],
        i = 0; i < f; i++)
            u[i] = a[r + f - 1 - i];
        for (u[f] = 0,
        v = Math.max(8, n.digitSize - 3 - f),
        i = 0; i < v; i++)
            u[f + 1 + i] = Math.floor(Math.random() * 254) + 1;
        for (u[n.digitSize - 2] = 2,
        u[n.digitSize - 1] = 0,
        h = 0; h < n.digitSize; ++s)
            c.digits[s] = u[h++],
            c.digits[s] += u[h++] << 8;
        l = n.barrett.powMod(c, n.e);
        y = n.radix == 16 ? biToHex(l) : biToString(l, n.radix);
        o += y + " "
    }
    return o.substring(0, o.length - 1)
}
# 调用加密函数本地模拟加密
pwd = encryptedString(key_to_encode,password)
console.log(pwd)

执行上面的代码,会提示xxx函数没有被定义等报错信息,这个时候,我们根据报错信息去再含有encryptedString文件里面去搜索即可。或者你直接把整个文件全部复制到本地,然后再调用encryptedString得到加密内容。

以上就是JS逆向的全过程,如果这边文章对你有很大帮助,请点赞、再看、转发三连吧。想要获取完整代码后台私信或者评论区留言。

代码仅供参考与学习,请勿利用文章的技术资料对任何计算机系统进行入侵,利用此文提供的信息造成直接或间接的后果,均有使用者本人负责。

下篇文章再见!

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言