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);