类如下:
    Public Class Password
        'Field
        '方法(加密还是解密)
        Public Enum CryptoAction
            actionEncrypt = 1
            actionDecrypt = 2
        End Enum
        Private _DESKEY As String
        '初始化向量
        Private _DESIV As String
        Public Sub New()
            MyBase.New()
            _DESKEY = "ABCDEFGH"
            _DESIV = "HGFEDCBA"
        End Sub
        Public Function EncryptOrDecryptData(ByVal dataString As String, ByVal Direction As CryptoAction) As String
            '加密方法对象(DES算法进行对称密钥加密)
            Dim desProvider As New DESCryptoServiceProvider
            '密码流对象
            Dim myCrypToStream As CryptoStream
            Dim memoryStream As New MemoryStream
            'Dim byteDESKEY As Byte() = GetKeyByteArray(Me._DESKEY )
            'Dim byteDESIV As Byte() = GetKeyByteArray(Me._DESIV)
            Dim byteDESKEY As Byte() = System.Text.Encoding.ASCII.GetBytes(Me._DESKEY)
            Dim byteDESIV As Byte() = System.Text.Encoding.ASCII.GetBytes(Me._DESIV)
            Dim myData As Byte() = System.Text.Encoding.ASCII.GetBytes(dataString)            Try
                Select Case Direction
                    Case CryptoAction.actionEncrypt
                        myCrypToStream = New CryptoStream(memoryStream, desProvider.CreateEncryptor(byteDESKEY, byteDESIV), CryptoStreamMode.Write)
                    Case CryptoAction.actionDecrypt
                        myCrypToStream = New CryptoStream(memoryStream, desProvider.CreateDecryptor(byteDESKEY, byteDESIV), CryptoStreamMode.Write)
                End Select                myCrypToStream.Write(myData, 0, myData.Length)
                myCrypToStream.FlushFinalBlock()
                'Return System.Text.Encoding.Unicode.GetString(memoryStream.ToArray)
                Return System.Text.Encoding.ASCII.GetString(memoryStream.ToArray)            Catch ex As Exception
                Throw ex
            End Try        End Function
    End Class能加密 但是不能解密
我分析好长时间找不出错误!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    换个现成的吧,可能是飞对称加密的算法,换个对称的就行了
    下面的你看看:using System;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;namespace ZHLXForum.DataProvider
    {
    /// <summary>
    /// 加密保存用户信息。
    /// </summary>
    public class CEncrypt
    {
    private SymmetricAlgorithm mobjCryptoService;
    private string Key; //密钥 public CEncrypt()
    {
    mobjCryptoService = new RijndaelManaged();
    Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";
    } //获得密钥
    private byte[] GetLegalKey()
    {
    string sTemp = Key;
    mobjCryptoService.GenerateKey(); byte[] bytTemp = mobjCryptoService.Key;
    int KeyLength = bytTemp.Length;

    if (sTemp.Length > KeyLength)
    {
    sTemp = sTemp.Substring(0, KeyLength);
    }
    else if (sTemp.Length < KeyLength)
    {
    sTemp = sTemp.PadRight(KeyLength, ' ');
    }

    return ASCIIEncoding.ASCII.GetBytes(sTemp);
    } //获得初始向量
    private byte[] GetLegalIV()
    {
    string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
    mobjCryptoService.GenerateIV();
    byte[] bytTemp = mobjCryptoService.IV;
    int IVLength = bytTemp.Length;
    if (sTemp.Length > IVLength)
    sTemp = sTemp.Substring(0, IVLength);
    else if (sTemp.Length < IVLength)
    sTemp = sTemp.PadRight(IVLength, ' ');
    return ASCIIEncoding.ASCII.GetBytes(sTemp);
    } /// <summary>
    /// 对称加密Rijndael算法实现
    /// </summary>
    /// <param name="Source">待加密串</param>
    /// <returns>加密所得串</returns>
    public string Encrypto(string Source)
    {
    byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
    MemoryStream ms = new MemoryStream();
    mobjCryptoService.Key = GetLegalKey();
    mobjCryptoService.IV = GetLegalIV();
    ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
    CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
    cs.Write(bytIn, 0, bytIn.Length);
    cs.FlushFinalBlock();
    ms.Close();
    byte[] bytOut = ms.ToArray();
    return Convert.ToBase64String(bytOut);
    } /// <summary>
    /// 用Rijndael算法对字符串进行解密
    /// </summary>
    /// <param name="Source">待解密串</param>
    /// <returns>解密所得串</returns>
    public string Decrypto(string Source)
    {
    byte[] bytIn = Convert.FromBase64String(Source);
    MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
    mobjCryptoService.Key = GetLegalKey();
    mobjCryptoService.IV = GetLegalIV();
    ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
    CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
    StreamReader sr = new StreamReader(cs);
    return sr.ReadToEnd();
    }
    }
      

  2.   

    我在这里等了好久 为什么没有人回答 真的怀疑csdn的能力