链接: https://blog.csdn.net/ff_aaa/article/details/119086094?spm=1001.2014.3001.5501.
上面链接里面我的做法是采用直接利用网上的工具进行解决,后面在网上搜到解密函数,我针对该题进行了适当的修改,代码如下。
public string Decode(string data)
{
string result;
byte[] byte1;
try
{
byte1 = Convert.FromBase64String("2yyUjXprc1+2TwAbbVU6eQ==");
byte[] bytes = Encoding.ASCII.GetBytes("gctf{got");
byte[] bytes2 = Encoding.ASCII.GetBytes("2niceday}");
DESCryptoServiceProvider dESCryptoServiceProvider
= new DESCryptoServiceProvider();
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,
dESCryptoServiceProvider.CreateDecryptor(bytes, bytes2),
CryptoStreamMode.Write);
cryptoStream.Write(byte1, 0, byte1.Length);
cryptoStream.FlushFinalBlock();
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
result = encoding.GetString(memoryStream.ToArray());
}
catch
{
result = "";
}
return result;
}
解密函数可对string data按照该题的加密方式进行逆向解密。那么只需要动一下显示函数,让条件不成立的时候不输出错误提示,而是输出解密后的结果。
private void button1_Click(object sender, EventArgs e)
{
if ("2yyUjXprc1+2TwAbbVU6eQ==" == Encode(textBox1.Text))
{
MessageBox.Show("Congratulation~!!");
}
else
{
MessageBox.Show(Decode(textBox1.Text));
}
}
这样在弹出的提示框里面输入密文,那么就弹出明文。
结果和链接里面直接求解的做法得到的结果一致。正确。