C# 如何解码SSR?

SSR:Y24wMS5lZmFuLm1lbjo4NzUxOm9yaWdpbjpyYzQtbWQ1Omh0dHBfcG9zdDpaV1poYm1OamVYVnUvP29iZnNwYXJhbT1Nak13TnpRdGRUa3phRTR5YVdGRk9TNWtiM2R1Ykc5aFpDNXRhV055YjNOdlpuUXVZMjl0JnByb3RvcGFyYW09JnJlbWFya3M9NmFhWjVyaXZNREUmZ3JvdXA9NmFXXzZhV3RZMlBrdXBFZ0xTQkg2SzZoNVlpUzc3eUlNVEF3TUVkQzc3eUo

使用Python脚本解码出来的结果:
脚本来自:https://github.com/luvvien/ss-ssr-url-parser/blob/master/ss_ssr_decode.py
{'ip': 'cn01.efan.men', 'port': '8751', 'protocol': 'origin', 'method': 'rc4-md5', 'obfs': 'http_post', 'password': 'efanccyun'}

但是使用Python的话,每一个使用者都要去配置运行环境,这样很麻烦。

所以我想请问一下是否可以使用C#进行解码?

我尝试使用以下代码进行解码:
string SSR = "Y24wMS5lZmFuLm1lbjo4NzUxOm9yaWdpbjpyYzQtbWQ1Omh0dHBfcG9zdDpaV1poYm1OamVYVnUvP29iZnNwYXJhbT1Nak13TnpRdGRUa3phRTR5YVdGRk9TNWtiM2R1Ykc5aFpDNXRhV055YjNOdlpuUXVZMjl0JnByb3RvcGFyYW09JnJlbWFya3M9NmFhWjVyaXZNREUmZ3JvdXA9NmFXXzZhV3RZMlBrdXBFZ0xTQkg2SzZoNVlpUzc3eUlNVEF3TUVkQzc3eUo";

byte[] newBytes = Convert.FromBase64String(SSR);

string orgStr = BitConverter.ToString(newBytes);

MessageBox.Show(orgStr);

但是无法成功运行,显示:The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.”

楼上的解释是正确的,但算法似乎有点问题,以下是我修改后的示例:

using System;
using System.Text;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            var ssr = "Y24wMS5lZmFuLm1lbjo4NzUxOm9yaWdpbjpyYzQtbWQ1Omh0dHBfcG9zdDpaV1poYm1OamVYVnUvP29iZnNwYXJhbT1Nak13TnpRdGRUa3phRTR5YVdGRk9TNWtiM2R1Ykc5aFpDNXRhV055YjNOdlpuUXVZMjl0JnByb3RvcGFyYW09JnJlbWFya3M9NmFhWjVyaXZNREUmZ3JvdXA9NmFXXzZhV3RZMlBrdXBFZ0xTQkg2SzZoNVlpUzc3eUlNVEF3TUVkQzc3eUo";
            Console.WriteLine(ssr.Length);
            ssr = ssr.Replace('-', '+').Replace('_', '/').PadRight(4*((ssr.Length+3)/4), '=');
            Console.WriteLine(ssr.Length);
            var newBytes = Convert.FromBase64String(ssr);
            var orgStr = Encoding.UTF8.GetString(newBytes);
            Console.WriteLine(orgStr);
        }
    }
}

运行结果:

271
272
cn01.efan.men:8751:origin:rc4-md5:http_post:ZWZhbmNjeXVu/?obfsparam=MjMwNzQtdTkzaE4yaWFFOS5kb3dubG9hZC5taWNyb3NvZnQuY29t&protoparam=&remark
s=6aaZ5rivMDE&group=6aW_6aWtY2PkupEgLSBH6K6h5YiS77yIMTAwMEdC77yJ

C#库严格按RFC标准做,必须是3的整数倍。所以你自己补位就可以了

string SSR =
"Y24wMS5lZmFuLm1lbjo4NzUxOm9yaWdpbjpyYzQtbWQ1Omh0dHBfcG9zdDpaV1poYm1OamVYVnUvP29iZnNwYXJhbT1Nak13TnpRdGRUa3phRTR5YVdGRk9TNWtiM2R1Ykc5aFpDNXRhV055YjNOdlpuUXVZMjl0JnByb3RvcGFyYW09JnJlbWFya3M9NmFhWjVyaXZNREUmZ3JvdXA9NmFXXzZhV3RZMlBrd

XBFZ0xTQkg2SzZoNVlpUzc3eUlNVEF3TUVkQzc3eUo";
            //按RFC规定,不足3位的后补=
            SSR = SSR = SSR.PadRight(((SSR.Length + 2) / 3) * 3, '='); 
            
            byte[] newBytes = Convert.FromBase64String(SSR);

            string orgStr = Encoding.UTF8.GetString(newBytes);