COMLicenseManagerLib.QLicenseManagerClass oa = new COMLicenseManagerLib.QLicenseManagerClass();
string aa="";
int count=0;
bool isF=false;
oa.EncryptByDES("test", "123456", 6, out aa, out count, out isF);同样的代码 会什么得到的aa字符串会不一样,winform的调用跟c++自己加密出来字符串一样 webform则不一样

解决方案 »

  1.   

    其中的一个加密解密类:using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Globalization;
    using System.Security.Cryptography;
    using System.IO;
    namespace WindowsApplication2
    {
        class DES
        {
            // 创建Key
            public string GenerateKey()
            {
                DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
                return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
            }
            ///MD5加密
            public string MD5Encrypt(string pToEncrypt, string sKey)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
                des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                StringBuilder ret = new StringBuilder();
                foreach (byte b in ms.ToArray())
                {
                    ret.AppendFormat("{0:X2}", b);
                }
                ret.ToString();
                return ret.ToString();
            }        ///MD5解密
            public string MD5Decrypt(string pToDecrypt, string sKey)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();            byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
                for (int x = 0; x < pToDecrypt.Length / 2; x++)
                {
                    int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
                    inputByteArray[x] = (byte)i;
                }            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();            StringBuilder ret = new StringBuilder();            return System.Text.Encoding.Default.GetString(ms.ToArray());
            }     }
    }另外一个加密解密类:using System;
    using System.Text;
    using System.IO;
    using System.Globalization;
    using System.Security.Cryptography;
    using System.Collections.Generic;namespace WindowsApplication2
    {
        class MD5
        {
            // 创建Key
            public string GenerateKey()
            {
                DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
                return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
            }
            // 加密字符串
            public string EncryptString(string sInputString, string sKey)
            {
                byte[] data = Encoding.UTF8.GetBytes(sInputString);
                DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
                DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                ICryptoTransform desencrypt = DES.CreateEncryptor();
                byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
                return BitConverter.ToString(result);
            }
            // 解密字符串
            public string DecryptString(string sInputString, string sKey)
            {
                string[] sInput = sInputString.Split("-".ToCharArray());
                byte[] data = new byte[sInput.Length];
                for (int i = 0; i < sInput.Length; i++)
                {
                    data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
                }
                DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
                DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                ICryptoTransform desencrypt = DES.CreateDecryptor();
                byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
                return Encoding.UTF8.GetString(result);
            }    }
    }
    调用这两个类:public partial class EDForm : Form
        {
            public EDForm()
            {
                InitializeComponent();
            }
            DES des = new DES();
            string key = null;
            /// <summary>
            /// 加密字符串
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                key = des.GenerateKey();
                this.textBox2.Text = des.MD5Encrypt(textBox1.Text,key);
            }        private void button2_Click(object sender, EventArgs e)
            {
                MessageBox.Show(des.MD5Decrypt(textBox2.Text, key));
            }
        }
      

  2.   

    我那个是C++写的des加密  winform调用与C++一致 webform就不行了