Access to the path is denied on File.ReadAllBytes on AES encrypted file

末鹿安然 提交于 2019-12-25 10:50:10

问题


I am trying to read the binary contents of a file with File.ReadAllBytes and getting the exception that access to the file is denied. Do I have to open the file first? Its taking the exception path in this try-catch and displaying.

Unable to load configuration data. Access to the path 'c:\worl\Project Alpha\Code\AlphaBackendService\AlphaBackendService\bin\Debug\alphaService.xml' is denied.

What am I missing?

try
{
  string path = AppDomain.CurrentDomain.BaseDirectory;
  eventLog1.WriteEntry(path);
  string fileName = System.IO.Path.Combine(path, "alphaService.xml");

  string sKey = "LvtZELDrB394hbSOi3SurLWAvC8adNpZiJmQDJHdfJU=";
  Byte[] keyBytes = Convert.FromBase64String(sKey);

  Byte[] contentsBytes = File.ReadAllBytes(fileName);

  string xmlStr = Encoding.UTF8.GetString(contentsBytes); 

  DecryptStringFromBase64String(xmlStr, keyBytes);

  eventLog1.WriteEntry(xmlStr);

  using (XmlReader reader = XmlReader.Create(new StringReader(xmlStr)))
  {
    reader.ReadToFollowing("DatabaseServerName");
    DatabaseServerName = reader.ReadElementContentAsString();
    reader.ReadToFollowing("DatabaseUserName");
    DatabaseUserName = reader.ReadElementContentAsString();
    reader.ReadToFollowing("DatabasePassword");
    DatabasePassword = reader.ReadElementContentAsString();
    reader.ReadToFollowing("RegistrationCode");
    RegistrationCode = reader.ReadElementContentAsString();
  }
  eventLog1.WriteEntry("Configuration data loaded successfully");
}
catch (Exception ex)
{
  eventLog1.WriteEntry("Unable to load configuration data.  " + ex.Message);
}

The Decrypt function requires a string with the contents but it does a Convert.FromBase84String so I don't know if File.ReadAllBytes should be used.

static string DecryptStringFromBase64String(string cipherText, byte[] Key)
    {
        // Check arguments. 
        if (cipherText == null || cipherText.Length <= 0)
            throw new ArgumentNullException("cipherText");
        if (Key == null || Key.Length <= 0)
            throw new ArgumentNullException("Key");

        string plaintext = null;
        // this is all of the bytes
        var allBytes = Convert.FromBase64String(cipherText);
        // get our IV that we pre-pended to the data
        byte[] iv = new byte[KeySize / 16];
        Array.Copy(allBytes, iv, iv.Length);
        // get the data we need to decrypt
        byte[] cipherBytes = new byte[allBytes.Length - iv.Length];
        Array.Copy(allBytes, iv.Length, cipherBytes, 0, cipherBytes.Length);

        using (var aes = Aes.Create())
        {
            // Create a decrytor to perform the stream transform.
            var decryptor = aes.CreateDecryptor(Key, iv);

            // Create the streams used for decryption. 
            using (MemoryStream msDecrypt = new MemoryStream(cipherBytes))
            {
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                    {
                        // Read the decrypted bytes from the decrypting stream 
                        // and place them in a string.
                        plaintext = srDecrypt.ReadToEnd();
                    }
                }
            }
        }

        return plaintext;
    }

来源:https://stackoverflow.com/questions/22943631/access-to-the-path-is-denied-on-file-readallbytes-on-aes-encrypted-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!