C# 迅雷7专用链接 / Thunder 7 Private Links.

在本文中主要阐述《迅雷7》专用链接的加密与解密、那么必须先
从迅雷7专用链接加密原理谈起
那么我们为什么需要深入研究《迅雷7》专用链接?
在我的感知中迅雷会后台捆绑很多应用与插件 而且很消耗内存与
性能、而网络上大量资源是通过迅雷专用链接才可以下载 逼迫用
户通过迅雷下载 当然这 些所谓的专用的链接只是难到用户  
不过你在做文件下载工具时 也可能会需要对一些常用链接的解密
的支持 总之研究研究总不会是坏事儿
C# 迅雷7专用链接 / Thunder 7 Private Links._第1张图片
从上我通过画图绘制的迅雷7专用链接解密过程 可以明确的看到
迅雷7专用链接的解密步骤
1:分解链接
2:BASE64 解密
3:排除 AA / ZZ
那么如何在代码中完成对迅雷7专用链接的解密与加密呢?
C# 迅雷7专用链接 / Thunder 7 Private Links._第2张图片
上方是解密的代码、代码流程你会感到很容易
上方是加密的代码、一旦你知道了如何去解密 那么就可以
变相大概的知道如何去加密
C# 迅雷7专用链接 / Thunder 7 Private Links._第3张图片
上方是调用加密与解密的一个简易示例代码 如果你执行后
大致可以看到如下图所示信息
C# 迅雷7专用链接 / Thunder 7 Private Links._第4张图片
示例源代码:
namespace T7UrlDemo
{
    using System;
    using System.Text;
    using System.Text.RegularExpressions;

    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = typeof(Program).Namespace;
            string strReallyUrl = StrFromT7Url("thunder://QUFodHRwOi8vZG93bi5sYWlsb29rLmNvbS9wc3Btb3ZpZS8wOV8xMS9bV1dXLmxhaWxvb2suQ09NXcHptq+57dOwyrXCvERWRLDmW01QNF0udG9ycmVudFpa");
            string strT7PrivUrl = StrToT7Url(strReallyUrl);
            Console.WriteLine(strReallyUrl);
            Console.WriteLine(strT7PrivUrl);
            Console.ReadKey(false);
        }

        static string StrFromT7Url(string buffer)
        {
            Match match = Regex.Match(buffer, @"\://([\s\S]+)");
            buffer = StrFromBase64(match.Groups[1].Value);
            return Regex.Replace(buffer, @"^AA|ZZ$", string.Empty, RegexOptions.Multiline);
        }

        static string StrToT7Url(string buffer)
        {
            buffer = string.Format(@"AA{0}ZZ", buffer);
            return "thunder://" + StrToBase64(buffer);
        }

        static string StrToBase64(string buffer)
        {
            Encoding sEncoding = Encoding.Default;
            return Convert.ToBase64String(sEncoding.GetBytes(buffer));
        }

        static string StrFromBase64(string buffer)
        {
            Encoding sEncoding = Encoding.Default;
            return sEncoding.GetString(Convert.FromBase64String(buffer));
        }
    }
}


你可能感兴趣的:(C#)