VB.net
   Function EncryptStrByHash(ByVal Str As String) As String
        If Str.Length = 0 Then
            Return ""
        End If
        Dim HaKey() As Byte
        Dim HaData(20) As Byte
        HaKey = System.Text.Encoding.ASCII.GetBytes((Str + "Test").ToCharArray())
        Dim Hmac As HMACSHA1
        Hmac = New HMACSHA1(HaKey)
        Dim cs As CryptoStream
        cs = New CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write)
        Try
            cs.Write(HaData, 0, HaData.Length)
        Catch ex As Exception
        Finally
            cs.Close()
        End Try
        Dim HaResult As String
        HaResult = System.Convert.ToBase64String(Hmac.Hash).Substring(0, 16)
        Dim RiKey() As Byte
        RiKey = System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray())
        Dim RiDataBuf() As Byte
        RiDataBuf = System.Text.Encoding.ASCII.GetBytes(Str.ToCharArray())
        Dim EncodedBytes(0) As Byte        Dim ms As MemoryStream
        Dim rv As RijndaelManaged
        ms = New MemoryStream
        rv = New RijndaelManaged
        cs = New CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey), CryptoStreamMode.Write)
        Try
            cs.Write(RiDataBuf, 0, RiDataBuf.Length)
            cs.FlushFinalBlock()
            EncodedBytes = ms.ToArray()
        Catch ex As Exception
        Finally
            ms.Close()
            cs.Close()
        End Try
        Return HaResult + System.Convert.ToBase64String(EncodedBytes)
    End FunctionC#        public string EncryptStrByHash(string src)
        {
            if (src.Length == 0)
            {
                return "";
            }
            byte[] HaKey = System.Text.Encoding.ASCII.GetBytes((src + "Test").ToCharArray());
            byte[] HaData = new byte[20];
            HMACSHA1 Hmac = new HMACSHA1(HaKey);
            CryptoStream cs = new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write);
            try
            {
                cs.Write(HaData, 0, HaData.Length);
            }
            finally
            {
                cs.Close();
            }
            string HaResult = System.Convert.ToBase64String(Hmac.Hash).Substring(0, 16);
            byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray());
            byte[] RiDataBuf = System.Text.Encoding.ASCII.GetBytes(src.ToCharArray());
            byte[] EncodedBytes =   { };
            MemoryStream ms = new MemoryStream();
            RijndaelManaged rv = new RijndaelManaged();
            cs = new CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey), CryptoStreamMode.Write);
            try
            {
                cs.Write(RiDataBuf, 0, RiDataBuf.Length);
                cs.FlushFinalBlock();
                EncodedBytes = ms.ToArray();
            }
            finally
            {
                ms.Close();
                cs.Close();
            }
            return HaResult + System.Convert.ToBase64String(EncodedBytes);
        }
转化过来的   不过加密同一段字符  两个结果不一样为什么是不是转换有什么问题 望高手赐教

解决方案 »

  1.   

    public string EncryptStrByHash(string Str) 

        if (Str.Length == 0) { 
            return ""; 
        } 
        byte[] HaKey = null; 
        byte[] HaData = new byte[21]; 
        HaKey = System.Text.Encoding.ASCII.GetBytes((Str + "Test").ToCharArray()); 
        HMACSHA1 Hmac = default(HMACSHA1); 
        Hmac = new HMACSHA1(HaKey); 
        CryptoStream cs = default(CryptoStream); 
        cs = new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write); 
        try { 
            cs.Write(HaData, 0, HaData.Length); 
        } 
        catch (Exception ex) { 
        } 
        finally { 
            cs.Close(); 
        } 
        string HaResult = null; 
        HaResult = System.Convert.ToBase64String(Hmac.Hash).Substring(0, 16); 
        byte[] RiKey = null; 
        RiKey = System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray()); 
        byte[] RiDataBuf = null; 
        RiDataBuf = System.Text.Encoding.ASCII.GetBytes(Str.ToCharArray()); 
        byte[] EncodedBytes = new byte[1]; 
        
        MemoryStream ms = default(MemoryStream); 
        RijndaelManaged rv = default(RijndaelManaged); 
        ms = new MemoryStream(); 
        rv = new RijndaelManaged(); 
        cs = new CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey), CryptoStreamMode.Write); 
        try { 
            cs.Write(RiDataBuf, 0, RiDataBuf.Length); 
            cs.FlushFinalBlock(); 
            EncodedBytes = ms.ToArray(); 
        } 
        catch (Exception ex) { 
        } 
        finally { 
            ms.Close(); 
            cs.Close(); 
        } 
        return HaResult + System.Convert.ToBase64String(EncodedBytes); 

      

  2.   

    谢谢camelials 
    不好意思  忘记说了 
    c#代码是源码    VB是按照c#一步一步 翻译过来的
    还有
    c#public static byte[] DESKey = new byte[] { 0x82, 0xBC, 0xA1};
    怎么转化为 VB
      

  3.   

    Public Function EncryptStrByHash(ByVal src As String) As String 
        If src.Length = 0 Then 
            Return "" 
        End If 
        Dim HaKey As Byte() = System.Text.Encoding.ASCII.GetBytes((src & "Test").ToCharArray()) 
        Dim HaData As Byte() = New Byte(19) {} 
        Dim Hmac As New HMACSHA1(HaKey) 
        Dim cs As New CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write) 
        Try 
            cs.Write(HaData, 0, HaData.Length) 
        Finally 
            cs.Close() 
        End Try 
        Dim HaResult As String = System.Convert.ToBase64String(Hmac.Hash).Substring(0, 16) 
        Dim RiKey As Byte() = System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray()) 
        Dim RiDataBuf As Byte() = System.Text.Encoding.ASCII.GetBytes(src.ToCharArray()) 
        Dim EncodedBytes As Byte() = {} 
        Dim ms As New MemoryStream() 
        Dim rv As New RijndaelManaged() 
        cs = New CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey), CryptoStreamMode.Write) 
        Try 
            cs.Write(RiDataBuf, 0, RiDataBuf.Length) 
            cs.FlushFinalBlock() 
            EncodedBytes = ms.ToArray() 
        Finally 
            ms.Close() 
            cs.Close() 
        End Try 
        Return HaResult + System.Convert.ToBase64String(EncodedBytes) 
    End Function 工具转的,我也没有仔细看.
      

  4.   

    public static byte[] DESKey = new byte[] { 0x82, 0xBC, 0xA1};-->>Public Shared DESKey As Byte() = New Byte() {&H82, &Hbc, &Ha1} 
      

  5.   


    camelials   
    麻烦你在帮我这段翻译一下 (to:vb.net)我找的翻译咋都不对啊 
            public string DecrypStrByHash(string src)
            {
                if (src.Length < 40) return "";
                byte[] SrcBytes = System.Convert.FromBase64String(src.Substring(16));
                byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(src.Substring(0, 16).ToCharArray());
                byte[] InitialText = new byte[SrcBytes.Length];
                RijndaelManaged rv = new RijndaelManaged();
                MemoryStream ms = new MemoryStream(SrcBytes);
                CryptoStream cs = new CryptoStream(ms, rv.CreateDecryptor(RiKey, RiKey), CryptoStreamMode.Read);
                try
                {
                    cs.Read(InitialText, 0, InitialText.Length);
                }
                finally
                {
                    ms.Close();
                    cs.Close();
                }
                System.Text.StringBuilder Result = new System.Text.StringBuilder();
                for (int i = 0; i < InitialText.Length; ++i) if (InitialText[i] > 0) Result.Append((char)InitialText[i]);
                return Result.ToString();
            }