根据解密函数算法反向推导出加密函数。
已知解密函数:
public string jiemihanshu(string encryptedValue)
{
string str = encryptedValue;
if (str.Length < 0x10)
{
return "";
}
for (int i = 0; i < 8; i++)
{
str = str.Substring(0, i + 1) + str.Substring(i + 2);
}
encryptedValue = str;
string s = "jxcdchgp";
string str3 = "jxcdchgp";
try
{
SymmetricAlgorithm algorithm = new DESCryptoServiceProvider();
algorithm.Key = Encoding.UTF8.GetBytes(s);
algorithm.IV = Encoding.UTF8.GetBytes(str3);
ICryptoTransform transform = algorithm.CreateDecryptor();
byte[] buffer = Convert.FromBase64String(encryptedValue);
MemoryStream stream = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Write);
stream2.Write(buffer, 0, buffer.Length);
stream2.FlushFinalBlock();
stream2.Close();
return Encoding.UTF8.GetString(stream.ToArray());
}
catch (Exception)
{
return "";
}
}
求一配套的加密函数:
加密函数:
public string jimihanshu(string text)
{
……
……
}
如果: jiamihanshu("00A50B56C85D73E68FFFDB")=="EPDXDZuT0EAOVRuR85YXqD+qabEgKuSNySuVKt4Y"; 则此加密函数就是所求的配套函数。
[
"00A50B56C85D73E68FFFDB"== jiemihanshu("EPDXDZuT0EAOVRuR85YXqD+qabEgKuSNySuVKt4Y");
]
所谓对称加密就是加密密钥和解密密钥相同,加密算法和解密算法互逆。由此可见加密密钥也是“jxcdchgp”,解密算法你已经给出,那么你新建一个工程,一路F11下去,加密算法不就出来了吗?!授人以鱼不如授人以渔,给你讲思路就行,其他的自己搞定去。
指路人啊,一语道破天机,程序员就是应该有钻研精神,根据你的指点,我将自己搞定。
http://www.dotblogs.com.tw/phoenix7765/archive/2008/08/30/5254.aspx
其实就是这2个最关键:
algorithm.Key = Encoding.UTF8.GetBytes(s);
algorithm.IV = Encoding.UTF8.GetBytes(str3);
在加密中也是要用到它们的。
你这个加密方法根本就是一个des加密了,只不过对密文进行了一个8位的混淆而已
核心处理代码:
for (int i = 0; i < 8; i++) //将密文去混淆,你已实现
{
str = str.Substring(0, i + 1) + str.Substring(i + 2);
}
//base解密过程......---明文
****************相应的加密过程为***********:
........
//base加密得到密文.....-->str
for(int i=7;i>-1;i--) //将密文加混淆
{
str = str.Substring(0, i + 1) + getChar(Math.Abs(str.Length-i)) + str.Substring(i + 1);
}
.....
private string conChs = "Weqhij0129ABCLM345DEnoRSTUpars78NObcdHIVPQktuvwXFGJK6lmxyYZfgz";
private string getChar(int beginStr)
{
var ind = beginStr%conChs.Length;
return conChs[ind].ToString();
}
看起来似乎有些道理了,请问:conChs = "Weqhij0129ABCLM345DEnoRSTUpars78NObcdHIVPQktuvwXFGJK6lmxyYZfgz"; 怎么来的。还有,通过验证,这个函数并不能得到从密码到明文转换。