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 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗