1 要求如下:
.密钥是一个长度16、由16进制字符组成的字符串,如:1234567890ABCDEF
使用时,相临的两位理解为一个16进制数的明文,然后转换为实际使用的8位密钥
2. 待加密数据按照PKCS5规则进行补位。(缺7位补7个0x07,缺6位则补6个0x06,以次类推,如果正好8位,也需要补8个0x08)
3. 实际加密模式选择DES-ECB
4. 经过DES加密后的数据必须通过Base64编码转换为明文的字符串
 请问谁有.net的DES加解密源代码,在线等,立马给分。

解决方案 »

  1.   

     我先抛砖引玉一下:
      private void GetKeyIV(out byte[] key, out byte[] iv)
            {
                byte[] buf = Convert.FromBase64String(this.ShareKey);
                key = new byte[8];
                iv = new byte[8];
                Array.Copy(buf, 0, key, 0, key.Length);
                Array.Copy(buf, key.Length, iv, 0, iv.Length);
            }
    现在是想如何得到正确的 key 和 iv ,对方给的密钥是一个长度16、由16进制字符组成的字符串,如:1234567890ABCDEF ,所以上述方法得不到正确的Key和IV。
      

  2.   

    http://topic.csdn.net/u/20091223/16/bb90df33-b81f-4cbf-a6e5-2107f7d762f8.html
      

  3.   

    C#.NET的DES加解密源代码,昨天刚发了一个;
    不过不能达到你说的加密算法供参考;你说的算法等待高手来解答后学习吧。
    /// <summary>
            /// 密码加密 
            /// </summary>
            /// <param name="data">要加密的字符串 </param>
            /// <returns></returns>
            public string EnCode(string data)
            {
                byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
                byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
                int i = cryptoProvider.KeySize;
                MemoryStream ms = new MemoryStream();
                CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey,
                byIV), CryptoStreamMode.Write);            StreamWriter sw = new StreamWriter(cst);
                sw.Write(data);
                sw.Flush();
                cst.FlushFinalBlock();
                sw.Flush();
                return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
            }        /// <summary>    
            /// 密码解密 
            /// </summary>    
            /// <param name="str">要解密的字符串</param>    
            /// <returns></returns>    
            public string DeCode(string data)
            {
                byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
                byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);            byte[] byEnc;
                try
                {
                    byEnc = Convert.FromBase64String(data);
                }
                catch
                {
                    return null;
                }            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
                MemoryStream ms = new MemoryStream(byEnc);
                CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey,
                byIV), CryptoStreamMode.Read);
                StreamReader sr = new StreamReader(cst);
                return sr.ReadToEnd();
            } 
      

  4.   

    简单的说下吧,现在主要是碰到问题1
    .密钥是一个长度16、由16进制字符组成的字符串,如:1234567890ABCDEF
    使用时,相临的两位理解为一个16进制数的明文,然后转换为实际使用的8位密钥  哪位大侠有相应算法,可以吗1234567890ABCDEF转换成DES使用的密钥?!
      

  5.   

    可以看看 MCTS Self-Pace 70-536 ,那里面有一章专门讲这个
      

  6.   


    byte[] key = ASCIIEncoding.ToBytes("1234567890ABCDEF");希望不会超长