各自独立:php,。net自己加密解密是没问题的首先测试过 MD5是一样的。但是用php和。net加密的结果不一样
用php加密的数据用。net解密就报错
请问为什么???
 $keys ='key';
 echo do_mencrypt('123r',$keys);
 echo '<br/>'.md5($keys);
  /**
*加密函数
*$input 要被加密的字符串
*$key 密钥
*/
function do_mencrypt($input, $key)
    {
        $input = base64_encode(trim($input));
        $key = substr(md5($key), 0, 24);
        $td = mcrypt_module_open('tripledes', '', 'ecb', '');
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, $key, $iv);
        $encrypted_data = mcrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        return trim(base64_encode($encrypted_data));
    }
    
/**
*解密函数
*$input 要被解密的字符串
*$key 密钥
*/
function do_mdecrypt($input, $key)
    {
        $input = base64_decode(trim($input));
        $td = mcrypt_module_open('tripledes', '', 'ecb', '');
        $key = substr(md5($key), 0, 24);
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, $key, $iv);
        $decrypted_data = mdecrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        return trim(base64_decode($decrypted_data));
     }using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;namespace detest
{
    public class dllEncrypt
    {
        //矢量,矢量可以为空
        private const string sIV = "qcDY6X+aPLw=";
        //构造一个对称算法
        private SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();        public dllEncrypt() { }        #region public string EncryptString(string Value)
        ///
        /// 加密字符串
        ///
        /// 输入的字符串
        /// 加密后的字符串
        public string EncryptString(string Value,string sKey)
        {
            ICryptoTransform ct;
            MemoryStream ms;
            CryptoStream cs;
            byte[] byt;            sKey = Md5(sKey);
            sKey = sKey.Substring(0,24);
            mCSP.Key = Encoding.UTF8.GetBytes(sKey);
            Value = Convert.ToBase64String(Encoding.UTF8.GetBytes(Value));
            //mCSP.IV = Convert.FromBase64String(sIV);
            //指定加密的运算模式
            mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
            //获取或设置加密算法的填充模式
            mCSP.Padding = System.Security.Cryptography.PaddingMode.None;
            mCSP.GenerateIV();
            ct = mCSP.CreateEncryptor();
            byt = padding(Encoding.UTF8.GetBytes(Value));
            ms = new MemoryStream();
            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
            cs.Write(byt, 0, byt.Length);
            cs.FlushFinalBlock();
            cs.Close();
            return Convert.ToBase64String(ms.ToArray());
        }
        #endregion        #region public string DecryptString(string Value)
        ///
        /// 解密字符串
        ///
        /// 加过密的字符串
        /// 解密后的字符串
        public string DecryptString(string Value, string sKey)
        {
            ICryptoTransform ct;
            MemoryStream ms;
            CryptoStream cs;
            byte[] byt;
            sKey = Md5(sKey);
            sKey = sKey.Substring(0, 24);
            mCSP.Key = Encoding.UTF8.GetBytes(sKey);
            //mCSP.IV = Convert.FromBase64String(sIV);
            mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
            mCSP.Padding = System.Security.Cryptography.PaddingMode.None;
            mCSP.GenerateIV();
            ct = mCSP.CreateDecryptor();
            byt = Convert.FromBase64String(Value);
            Console.WriteLine(Encoding.UTF8.GetString(byt));
            ms = new MemoryStream();
            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
            cs.Write(byt, 0, byt.Length);
            cs.FlushFinalBlock();
            cs.Close();
            String re = Encoding.UTF8.GetString(ms.ToArray());
            re = upPadding(re);
            re = Encoding.UTF8.GetString(Convert.FromBase64String(re));
            return re;
        }
        #endregion        public static string Md5(string str)
        {            string pwd = "";
            MD5 md5 = MD5.Create();//实例化一个md5对像
            // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
            // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
            for (int i = 0; i < s.Length; i++)
            {
                // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符                pwd = pwd + s[i].ToString("X");            }
            return pwd.ToLower();        }         static byte[] padding(byte[] source)
        {
            int len = source.Length;
            int s = len / 8;
            if (len % 8 > 0)
            {
                s = s + 1;
            }            byte[] newV = new byte[s * 8];
            for (int i = 0; i < len; i++)
            {
                newV[i] = source[i];
            }
            for (int i = len; i < s * 8 - len; i++)
            {
                newV[i] = Convert.ToByte('\0');
            }            return newV;
        }        string upPadding(string p) 
        { 
           return p = p.Replace("\0","");
        }
    }}
   using System;
using System.Collections.Generic;
using System.Text;
namespace detest
{
    class Program
    {
        static void Main(string[] args)
        {
            String key = "key";
            dllEncrypt ec = new dllEncrypt();
            String en = ec.EncryptString("123r", key);
            Console.WriteLine(en);
            String ot = ec.DecryptString(en, key);
            Console.WriteLine(ot);
            Console.Write(1);
        }
    }
}