110,536
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Security.Cryptography;
using System.Net;
using System.Xml;
namespace ConsoleApp1 {
class Program {
static void Main(string[] args) {
string url = "http://app.58.com/api/detail/zpfangchan/36149962795705?v=1&platform=android&version=7.0.1.0&sidDict=%7B%22PGTID%22%3A%22%22%2C%22GTID%22%3A%22101551665202271302713434986%22%7D&format=xml&localname=linyi&commondata=%7B%22cateid%22%3A%2238673%22%2C%22catename%22%3A%22%25e6%2588%25bf%25e5%259c%25b0%25e4%25ba%25a7%22%2C%22filterparams%22%3A%7B%7D%7D";
WebClient webClient = new WebClient();
webClient.Headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36";
webClient.Headers.Add(HttpRequestHeader.Accept, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
byte[] myDataBuffer = webClient.DownloadData(url);
string data = Encoding.UTF8.GetString(myDataBuffer);
XmlDocument xml = new XmlDocument();
xml.LoadXml(data);
XmlNode xn_tel_info = xml.SelectSingleNode("/root/result/userinfo_area/tel_info");
if (xn_tel_info != null) {
string phone = xn_tel_info.Attributes["content"].Value;
Console.WriteLine(phone);
if (phone.Length > 0)
phone = AES.Decrypt(phone, "crazycrazycrazy1");
Console.WriteLine(phone);
}
Console.ReadLine();
}
}
public class AES {
/// <summary>
/// 加密
/// </summary>
/// <param name="str"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string Encrypt(string str, string key) {
if (string.IsNullOrEmpty(str)) return null;
Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
RijndaelManaged rm = new RijndaelManaged {
Key = Encoding.UTF8.GetBytes(key),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
//string ss = resultArray.ToHexString();
//return Convert.ToBase64String(resultArray, 0, resultArray.Length);
return resultArray.ToHexString();
}
/// <summary>
/// 解密
/// </summary>
/// <param name="str"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string Decrypt(string str, string key) {
if (string.IsNullOrEmpty(str)) return null;
//byte[] toEncryptArray = Convert.FromBase64String(str);
byte[] toEncryptArray = str.ToByteArr();
RijndaelManaged rm = new RijndaelManaged {
Key = Encoding.UTF8.GetBytes(key),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
}
public static class Util {
public static string ToHexString(this byte[] bytes) {
string byteStr = string.Empty;
if (bytes != null || bytes.Length > 0) {
foreach (var item in bytes) {
byteStr += string.Format("{0:X2}", item);
}
}
return byteStr;
}
public static byte[] ToByteArr(this string hex) {
var inputByteArray = new byte[hex.Length / 2];
for (var x = 0; x < inputByteArray.Length; x++) {
var i = Convert.ToInt32(hex.Substring(x * 2, 2), 16);
inputByteArray[x] = (byte)i;
}
return inputByteArray;
}
}
}
新建一个.net core的控制台项目起名叫ConsoleApp1,然后复制全部代码,粘贴到唯一的那个文档里去就可以执行了。
实际上,html 往往不如 xml 那么严格。这种程序应该使用一种 html 语法解析器来解析,而不用使用 xml 解析器。