首页新闻找找看学习计划

求一对称加密函数

0
悬赏园豆:160 [已解决问题] 解决于 2012-01-28 22:38

根据解密函数算法反向推导出加密函数。
已知解密函数:

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

]

一米阳光2011的主页 一米阳光2011 | 初学一级 | 园豆:61
提问于:2011-12-31 12:09
< >
分享
最佳答案
0

所谓对称加密就是加密密钥和解密密钥相同,加密算法和解密算法互逆。由此可见加密密钥也是“jxcdchgp”,解密算法你已经给出,那么你新建一个工程,一路F11下去,加密算法不就出来了吗?!授人以鱼不如授人以渔,给你讲思路就行,其他的自己搞定去。

收获园豆:160
感受 | 菜鸟二级 |园豆:365 | 2012-01-28 22:16

指路人啊,一语道破天机,程序员就是应该有钻研精神,根据你的指点,我将自己搞定。

一米阳光2011 | 园豆:61 (初学一级) | 2012-01-28 22:36
其他回答(2)
0

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

在加密中也是要用到它们的。

chenping2008 | 园豆:9836 (大侠五级) | 2012-01-01 19:05
0

你这个加密方法根本就是一个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();
}

蠕虫 | 园豆:305 (菜鸟二级) | 2012-01-04 18:31

看起来似乎有些道理了,请问:conChs = "Weqhij0129ABCLM345DEnoRSTUpars78NObcdHIVPQktuvwXFGJK6lmxyYZfgz"; 怎么来的。还有,通过验证,这个函数并不能得到从密码到明文转换。

支持(0) 反对(0) 一米阳光2011 | 园豆:61 (初学一级) | 2012-01-05 16:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册