Cryptography 尝试解密时,Base-64字符串中的字符无效

Cryptography 尝试解密时,Base-64字符串中的字符无效,cryptography,base64,encryption,Cryptography,Base64,Encryption,我有一个加密/解密方法,除了一个例外。当我试图从一个文本文件中读入加密文本,然后解密它时,我得到了以下错误 Base-64字符串中的无效字符 奇怪的是,如果我只是将加密文本读入一个文本框,然后将其复制并粘贴到另一个文本框中,该文本框使用相同的解密方法进行解密,效果很好。没有错误,解密继续进行。我在下面列出了解密方法和用于读取文本文件的方法 解密方法 Public Shared Function DecryptUserString(ByRef cipheredText As String,

我有一个加密/解密方法,除了一个例外。当我试图从一个文本文件中读入加密文本,然后解密它时,我得到了以下错误

Base-64字符串中的无效字符

奇怪的是,如果我只是将加密文本读入一个文本框,然后将其复制并粘贴到另一个文本框中,该文本框使用相同的解密方法进行解密,效果很好。没有错误,解密继续进行。我在下面列出了解密方法和用于读取文本文件的方法

解密方法

   Public Shared Function DecryptUserString(ByRef cipheredText As String, ByRef password As String) As String
      Dim RijndaelManagedObj As New RijndaelManaged
      Dim RijndaelEncObj As ICryptoTransform, MD5Obj As New MD5CryptoServiceProvider
      Dim DecryptedBytes As Byte(), EncryptedData As Byte()
      Dim PasswordBytes As Byte() = New ASCIIEncoding().GetBytes(password)
      Dim UTF8Encoding As System.Text.Encoding = System.Text.Encoding.UTF8

      'A modified Base64 is sent with ~ and -  so it can be sent as a form post
      EncryptedData = Convert.FromBase64String(Replace(Replace(cipheredText, "~", "+"), "-", "="))

      RijndaelManagedObj.BlockSize = 128
      RijndaelManagedObj.KeySize = 128
      RijndaelManagedObj.Mode = CipherMode.ECB
      RijndaelManagedObj.Padding = PaddingMode.None
      RijndaelManagedObj.Key = MD5Obj.ComputeHash(PasswordBytes)
      RijndaelEncObj = RijndaelManagedObj.CreateDecryptor()

      DecryptedBytes = RijndaelEncObj.TransformFinalBlock(EncryptedData, 0, EncryptedData.Length)

      If DecryptedBytes.Length > 0 Then
         DecryptUserString = UTF8Encoding.GetString(DecryptedBytes, 0, DecryptedBytes.Length)
         If DecryptedBytes.Length = 0 Then DecryptUserString = New ASCIIEncoding().GetString(DecryptedBytes)
      Else
         DecryptUserString = ""
      End If
   End Function
从文件中读取文本的方法

  Private Function ReadText(ByVal TextFilePath As String) As String
    Using ReadStream As FileStream = File.OpenRead(TextFilePath)
      Dim FileTextBuilder As New StringBuilder()
      Dim DataTransit As Byte() = New Byte(ReadStream.Length) {}
      Dim DataEncoding As New UTF8Encoding(True)
      While ReadStream.Read(DataTransit, 0, DataTransit.Length) > 0
          FileTextBuilder.Append(DataEncoding.GetString(DataTransit))
      End While
      Return FileTextBuilder.ToString()
    End Using
  End Function

您不能使用File.ReadAllText()方法读取整个文件,然后像使用文本框一样解密吗?

我知道,如果文件很大,这不是一个好主意,但您可以尝试一下,看看文件是否保存得很好,或者您读取的文件是否不好。

这很有效!我的文件总是少于20k。我是否需要担心文件大小?再次感谢@网络蠕虫:不,没有一个“标准”的文件大小你必须担心。。。但请记住:当您在内存中加载文件时,RAM会被占用。。。因此,文件越大,消耗的内存量就越大。