APP开发王 2024-04-23 10:19 采纳率: 50%
浏览 2

会JS解密的来(AES解密),红包奖励!

会JS解密的来(AES解密),红包奖励!

在喜马拉雅的网站请求返回了衣端加密的文本,我知道在网站页面里的JS里有解密函数

可惜我不太懂浏览器调试JS来得到解密方法,有懂的帮下忙,成功有红包奖励哈!

要求将解密方法转成C#代码(需要测试可以成功解密)

加密的字符如下:

“waGTOr9hmaoSEOq2xnk0Di7__Wbj6uf_ZaIfy9-EOW8x_oyxv_YkWBJzDvvSXe0xbGQRTL3aL1eCnVwWvsvEhJzZWf6vZQHFs8bbior0NUqLTla2ZSmhQ3LUUsOyxG2VWAmYWVavSz4Eb_mzzo7bdwEA2lqLAJ3p”

提示在喜马拉雅网页里可以看到JS调用:


```javascript
Lt = function(t) {
                return Dt.AES.decrypt({
                    ciphertext: Rt.enc.Base64url.parse(t)
                }, Dt.enc.Hex.parse("aaad3e4fd540b0f79dca95606e72bf93"), {
                    mode: Dt.mode.ECB,
                    padding: Dt.pad.Pkcs7
                }).toString(Dt.enc.Utf8)

```

  • 写回答

7条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-23 10:19
    关注

    引自免费微信小程序:皆我百晓生

    首先,要从喜马拉雅的JS代码中提取AES解密方法,你需要在浏览器的开发者工具中进行以下步骤:

    1. 打开开发者工具:在Chrome或Firefox等现代浏览器中,按F12或右键点击页面并选择“检查”来打开开发者工具。

    2. 定位到JavaScript代码:在开发者工具的Sources面板中,找到包含Lt = function(t)这段代码的文件。这通常在Sources下的某个.js文件中。

    3. 查找调用decrypt的代码:在Lt函数定义中,找到Dt.AES.decrypt这一行。这行代码就是AES解密的核心部分。

    4. 复制解密参数:注意ciphertextkey(这里为Hex.parse("aaad3e4fd540b0f79dca95606e72bf93"))以及modepadding的值。这些是解密时所需的。

    5. 解密过程:在JS中,Rt.enc.Base64url.parse(t)用于从Base64url编码的字符串转换为原始数据,Dt.enc.Hex.parse用于从十六进制字符串转换为字节。你需要理解这个过程,并在C#中实现相似的操作。

    以下是C#代码的示例,基于.NET Core的System.Security.Cryptography.Aes库进行AES解密:

    using System;
    using System.Text;
    using System.Security.Cryptography;
    using System.Text.RegularExpressions;
    
    public static class AESHelper
    {
        private const string KeyHex = "aaad3e4fd540b0f79dca95606e72bf93";
        private const string PaddingPattern = @"pkcs7$";
    
        public static string DecryptAES(string encryptedText, string keyHex)
        {
            byte[] keyBytes = Convert.FromHex(keyHex);
            byte[] iv = new byte[16]; // Assuming ECB mode, no IV is used here
            byte[] encryptedBytes = Convert.FromBase64String(encryptedText);
    
            using (Aes aes = Aes.Create())
            {
                aes.Key = keyBytes;
                aes.IV = iv; // If you have an IV, use it here
    
                ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
                using (MemoryStream ms = new MemoryStream(encryptedBytes))
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                using (StreamReader sr = new StreamReader(cs))
                {
                    string decryptedText = sr.ReadToEnd();
                    // Remove PKCS7 padding if present
                    decryptedText = RemovePadding(decryptedText, PaddingPattern);
                    return decryptedText;
                }
            }
        }
    
        private static string RemovePadding(string input, string pattern)
        {
            int lastByte = input.Length - 1;
            if (Regex.IsMatch(input, pattern))
            {
                int padding = Convert.ToInt32(input.Substring(lastByte, input.Length - lastByte).Replace("pkcs7", ""), 16);
                if (padding > 0 && padding <= lastByte)
                {
                    return input.Substring(0, input.Length - padding);
                }
            }
            return input;
        }
    }
    
    // To use the method:
    string decryptedText = AESHelper.DecryptAES("your_encrypted_text", "aaad3e4fd540b0f79dca95606e72bf93");
    

    请确保替换"your_encrypted_text"为你从JS中获取的实际加密文本。这个C#代码应该能解密出与JS中相同的明文。如果你在实际应用中遇到问题,可能需要调整IV或检查输入是否正确。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月23日

悬赏问题

  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题