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

会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)

```

  • 写回答

8条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀