引自免费微信小程序:皆我百晓生
首先,要从喜马拉雅的JS代码中提取AES解密方法,你需要在浏览器的开发者工具中进行以下步骤:
-
打开开发者工具:在Chrome或Firefox等现代浏览器中,按F12或右键点击页面并选择“检查”来打开开发者工具。
-
定位到JavaScript代码:在开发者工具的Sources面板中,找到包含Lt = function(t)
这段代码的文件。这通常在Sources
下的某个.js文件中。
-
查找调用decrypt
的代码:在Lt
函数定义中,找到Dt.AES.decrypt
这一行。这行代码就是AES解密的核心部分。
-
复制解密参数:注意ciphertext
、key
(这里为Hex.parse("aaad3e4fd540b0f79dca95606e72bf93")
)以及mode
和padding
的值。这些是解密时所需的。
-
解密过程:在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或检查输入是否正确。