有什么办法可以实现以下操作:
把字符串str1加密或者压缩或者其他什么的,得到一个字符串str2,
要求:
1,str1为不定长度字符串,但是长度范围确定且不会很长,比如15到30个字符
2,str2长度要求确定,比如20位,但是不能太长
3,str2可以反向解出str1

解决方案 »

  1.   

    利用MD5进行加密解密吧1.using System;   
    2.using System.Collections.Generic;   
    3.using System.Linq;   
    4.using System.Text;   
    5.using System.IO;   
    6.using System.Security.Cryptography;   
    7.  
    8.namespace BLL   
    9.{   
    10.    public class md5Manger   
    11.    {  
    12.        #region MD5加密                   
    13.        /// <summary>   
    14.        /// MD5加密   
    15.        /// </summary>   
    16.        /// <param name="strSource">需要加密的字符串</param>   
    17.        /// <returns>MD5加密后的字符串</returns>   
    18.        public static string Md5Encrypt(string strSource)   
    19.        {   
    20.            //把字符串放到byte数组中   
    21.            byte[] bytIn = System.Text.Encoding.Default.GetBytes(strSource);   
    22.            //建立加密对象的密钥和偏移量           
    23.            byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量   
    24.            byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥   
    25.            //实例DES加密类   
    26.            DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider();   
    27.            mobjCryptoService.Key = iv;   
    28.            mobjCryptoService.IV = key;   
    29.            ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();   
    30.            //实例MemoryStream流加密密文件   
    31.            System.IO.MemoryStream ms = new System.IO.MemoryStream();   
    32.            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);   
    33.            cs.Write(bytIn, 0, bytIn.Length);   
    34.            cs.FlushFinalBlock();   
    35.            return System.Convert.ToBase64String(ms.ToArray());   
    36.        }  
    37.        #endregion  
    38. 
    39.        #region MD5解密                  
    40.        /// <summary>   
    41.        /// MD5解密   
    42.        /// </summary>   
    43.        /// <param name="Source">需要解密的字符串</param>   
    44.        /// <returns>MD5解密后的字符串</returns>   
    45.        public static string Md5Decrypt(string Source)   
    46.        {   
    47.            //将解密字符串转换成字节数组   
    48.            byte[] bytIn = System.Convert.FromBase64String(Source);   
    49.            //给出解密的密钥和偏移量,密钥和偏移量必须与加密时的密钥和偏移量相同   
    50.            byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量   
    51.            byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥   
    52.            DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider();   
    53.            mobjCryptoService.Key = iv;   
    54.            mobjCryptoService.IV = key;   
    55.            //实例流进行解密   
    56.            System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length);   
    57.            ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();   
    58.            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);   
    59.            StreamReader strd = new StreamReader(cs, Encoding.Default);   
    60.            return strd.ReadToEnd();   
    61.        }  
    62.        #endregion   
    63.    }   
    64.  
    65.}  
      

  2.   

    http://hi.baidu.com/aidfan/blog/item/55d3438135c421dcbd3e1e5b.html
    http://blog.csdn.net/asxinyu_usst/archive/2009/12/02/4924207.aspx还可以更简单的 不用流的 自己搜搜看
    str2固定范围放宽到64把
      

  3.   

    http://hi.baidu.com/planner/blog/item/04f3272d10b41a30359bf729.html  都是可逆的,而且生成的新字符都一样长
      

  4.   

    MD5 加密了就不可以解密了(非对称加密)
    可以解密的(对称加密)1楼的 那个不叫MD5啊
      

  5.   

    MD5是一种哈希函数,用来做消息验证,由于函数不可逆所以不能做可逆信息的加密,所以一楼……
    加密常用的算法为AES和DES,在System.Net.Security.Cryptography名字空间下可以找到
    如果想用定长的输出,那么我首先告诉你,这样的加密函数不是单射的函数,也就是不可能做到明文和密文的一对一,比如MD5算法就是这样做的。不是单射函数那么也就没有可逆的方法。
    如果按你说的输入长度有范围的话,那么这样的可逆算法还是可以考虑的,比如输入20-30个字符,不够30个字符用0补齐30个,做到定长输入,然后用DES或AES加密,输出的是30个。
      

  6.   

    给你个加密解密的类
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Security.Cryptography;namespace myEncrypt
    {
        public class EncryptAndDencrypt
        {
            #region "定义加密字串变量"
            private SymmetricAlgorithm mCSP;  //声明对称算法变量
            private const string CIV = "Mi9l/+7Zujhy12se6Yjy111A";  //初始化向量
            private const string CKEY = "jkHuIy9D/9i="; //密钥(常量)
            #endregion
            /// <summary>
            /// 实例化
            /// </summary>
            public EncryptAndDencrypt()
            {
                mCSP = new DESCryptoServiceProvider();  //定义访问数据加密标准 (DES) 算法的加密服务提供程序 (CSP)版本的包装对象,此类是SymmetricAlgorithm的派生类
            }
            /// <summary>
            /// 加密字符串
            /// </summary>
            /// <param name="Value">需加密的字符串</param>
            /// <returns></returns>
            public string EncryptString(string Value)
            {
                ICryptoTransform ct; //定义基本的加密转换运算
                MemoryStream ms; //定义内存流
                CryptoStream cs; //定义将内存流链接到加密转换的流
                byte[] byt;
                //CreateEncryptor创建(对称数据)加密对象
                ct = mCSP.CreateEncryptor(Convert.FromBase64String(CKEY), Convert.FromBase64String(CIV)); //用指定的密钥和初始化向量创建对称数据加密标准
                byt = Encoding.UTF8.GetBytes(Value); //将Value字符转换为UTF-8编码的字节序列
                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()); //将内存流转写入字节数组并转换为string字符
            }
            /// <summary>
            /// 解密字符串
            /// </summary>
            /// <param name="Value">要解密的字符串</param>
            /// <returns>string</returns>
            public string DecryptString(string Value)
            {
                ICryptoTransform ct; //定义基本的加密转换运算
                MemoryStream ms; //定义内存流
                CryptoStream cs; //定义将数据流链接到加密转换的流
                byte[] byt;
                ct = mCSP.CreateDecryptor(Convert.FromBase64String(CKEY), Convert.FromBase64String(CIV)); //用指定的密钥和初始化向量创建对称数据解密标准
                byt = Convert.FromBase64String(Value); //将Value(Base 64)字符转换成字节数组
                ms = new MemoryStream();
                cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
                cs.Write(byt, 0, byt.Length);
                cs.FlushFinalBlock();
                cs.Close();
                return Encoding.UTF8.GetString(ms.ToArray()); //将字节数组中的所有字符解码为一个字符串
            }
        }
    }
      

  7.   

    DES:http://blog.csdn.net/dcsoft/archive/2006/08/21/1103782.aspx
    AES:http://hi.baidu.com/aidfan/blog/item/55d3438135c421dcbd3e1e5b.html
      

  8.   

    做到定长可以做哈希计算,String->Byte[]->ComputeHash()就好了http://www.cnblogs.com/freeliver54/archive/2008/09/28/1301581.html