请问如何从CryptoStream返回已解码的字节而不是文本

时间:2015-05-25 09:55:32

标签: .net encryption byte cryptostream

请问如何在以下代码段中返回已解码的字节而不是文本:

Public Shared Function decryptAsText(key As Byte(), ciphertext As Byte(), iv As Byte()) As String
    Dim dec As String = Nothing
    Try
        Using rj = New Security.Cryptography.RijndaelManaged With {.Key = key, .IV = iv, .Mode = Security.Cryptography.CipherMode.CBC, .Padding = PaddingMode.PKCS7}
            Using ms = New IO.MemoryStream(ciphertext)
                Using cs = New Security.Cryptography.CryptoStream(ms, rj.CreateDecryptor(key, iv), Security.Cryptography.CryptoStreamMode.Read)
                    Using sr = New IO.StreamReader(cs)
                        dec = sr.ReadToEnd
                    End Using
                End Using
            End Using
        End Using
    Catch e As Exception
    End Try

    Return dec
End Function

我的尝试失败

 Public Shared Function decryptAsBytes(key As Byte(), ciphertext As Byte(), iv As Byte()) As Byte()
        Try
            Using rj = New Security.Cryptography.RijndaelManaged With {.Key = key, .IV = iv, .Mode = Security.Cryptography.CipherMode.CBC, .Padding = PaddingMode.PKCS7}
                Using ms = New IO.MemoryStream(ciphertext)
                    Using cs = New Security.Cryptography.CryptoStream(ms, rj.CreateDecryptor(key, iv), Security.Cryptography.CryptoStreamMode.Read)
                        Dim l As Integer = CInt(cs.Length)
                        Dim b(l - 1) As Byte
                        cs.Read(b, 0, l)
                        Return b
                    End Using
                End Using
            End Using
        Catch e As Exception
        End Try
        Return {}
    End Function

1 个答案:

答案 0 :(得分:0)

最后让这个工作

Public Shared Function decryptAsBytes(key As Byte(), ciphertext As Byte(), iv As Byte()) As Byte()
    Try
        Using rj = New Security.Cryptography.RijndaelManaged With {.Key = key, .IV = iv, .Mode = Security.Cryptography.CipherMode.CBC, .Padding = PaddingMode.PKCS7}
            Using ms = New IO.MemoryStream(ciphertext)
                Using cs = New Security.Cryptography.CryptoStream(ms, rj.CreateDecryptor(key, iv), Security.Cryptography.CryptoStreamMode.Read)
                    Using ds = New IO.MemoryStream()
                        cs.CopyTo(ds)
                        Return ds.ToArray
                    End Using
                End Using
            End Using
        End Using
    Catch e As Exception
    End Try
    Return {}
End Function