Vinodh Muthusamy Ответов: 0

Как получить SFTP-путь в filestream при расшифровке на стороне клиента, возможно ли это


Иам с использованием Ренси.SshNet dll для загрузки файла на sftp-сервер.

перед загрузкой файла я шифрую файл и отправляю его по указанному пути, он работает идеально.

Теперь, когда я пытаюсь расшифровать файл непосредственно на стороне клиента (SFTP Path), он ссылается на локальный путь, а не на путь клиента, хотя я указываю SFTP path.

пожалуйста, предоставьте мне решение.

ЗАПИСКА: Моя цель состоит в том, чтобы зашифровать файл в моем локальном и расшифровать образец файла на стороне клиента

Ниже приведена основная функция для шифрования, загрузки, дешифрования


using (SftpClient client = new SftpClient(sftpHost, sftpPort, sftpUserName, sftpPassword))
       {
         EncryptFile(@"D:\ren.xlsx", @"D:\ren_encrypt.xlsx"); //Encryption process
         upload(client, @"\Upload", @"D:\ren_encrypt.xlsx"); // Uploading process
         client.Connect();
         if (client.Exists(@"\Upload\ren_encrypt.xlsx"))//Checking file exist in sftp path
           {
            DecryptFile(@"\Upload\ren_encrypt.xlsx", @"\Upload\ren_decrypt.xlsx");
            client.Disconnect();
           }
        }


Ниже приведен код шифрования:

private void EncryptFile(string inputFile, string outputFile)
        {

            try
            {
                string password = @"myKey123"; //   Key Here
                UnicodeEncoding UE = new UnicodeEncoding();
                byte[] key = UE.GetBytes(password);
                string cryptFile = outputFile;
                FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
                RijndaelManaged RMCrypto = new RijndaelManaged();
                CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);
                FileStream fsIn = new FileStream(inputFile, FileMode.Open);
                int data;
                while ((data = fsIn.ReadByte()) != -1)
                    cs.WriteByte((byte)data);
                fsIn.Close();
                cs.Close();
                fsCrypt.Close();
            }
            catch
            {
                MessageBox.Show("Encryption failed!", "Error");
            }
        }


Ниже приведен код загрузки:

public void upload(SftpClient client, string destinationpath, string sourcefile)
       {
           try
           {
               client.Connect();
               client.ChangeDirectory(destinationpath);
               using (FileStream fs = new FileStream(sourcefile, FileMode.Open))
               {
                   client.BufferSize = 4 * 1024;
                   if (client.Exists(Path.GetFileName(sourcefile)))
                   {
                       client.DeleteFile(Path.GetFileName(sourcefile));
                   }
                   client.UploadFile(fs, Path.GetFileName(sourcefile));
                   client.Disconnect();
               }

           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
       }


Ниже код предназначен для расшифровки, вот и пришел наш процесс сбоя

 private void DecryptFile(string inputFile, string outputFile)
        {

            try
            {
                string scheck = Path.GetFileName(inputFile);
                     string password = @"myKey123"; //   Key Here
                UnicodeEncoding UE = new UnicodeEncoding();
                byte[] key = UE.GetBytes(password);
                FileStream fsCrypt = new FileStream(inputFile, FileMode.Open);

// Here in inputfile parameter what iam passing is "\Upload\ren_encrypt.xlsx" (SFTP Path) but, it throws an error as "Could not find a part of the path 'D:\Upload\ren_encrypt.xlsx'."  I couldnt understand why it is searching in my local drive instead of SFTP server which i have provided correct sftp path

                RijndaelManaged RMCrypto = new RijndaelManaged();
                CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateDecryptor(key, key), CryptoStreamMode.Read);
                FileStream fsOut = new FileStream(outputFile, FileMode.Create);
                int data;
                while ((data = cs.ReadByte()) != -1)
                    fsOut.WriteByte((byte)data);
                fsOut.Close();
                cs.Close();
                fsCrypt.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


пожалуйста, решите мой вопрос.

Что я уже пробовал:

Ниже код предназначен для расшифровки, вот и пришел наш процесс сбоя

 private void DecryptFile(string inputFile, string outputFile)
        {

            try
            {
                string scheck = Path.GetFileName(inputFile);
                     string password = @"myKey123"; //   Key Here
                UnicodeEncoding UE = new UnicodeEncoding();
                byte[] key = UE.GetBytes(password);
                FileStream fsCrypt = new FileStream(inputFile, FileMode.Open);

// Here in inputfile parameter what iam passing is "\Upload\ren_encrypt.xlsx" (SFTP Path) but, it throws an error as "Could not find a part of the path 'D:\Upload\ren_encrypt.xlsx'."  I couldnt understand why it is searching in my local drive instead of SFTP server which i have provided correct sftp path

                RijndaelManaged RMCrypto = new RijndaelManaged();
                CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateDecryptor(key, key), CryptoStreamMode.Read);
                FileStream fsOut = new FileStream(outputFile, FileMode.Create);
                int data;
                while ((data = cs.ReadByte()) != -1)
                    fsOut.WriteByte((byte)data);
                fsOut.Close();
                cs.Close();
                fsCrypt.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

Richard Deeming

Ваша функция расшифровки не ссылается на SFTP-клиент, и очень маловероятно, что SFTP-сервер позволит вам изменять файлы непосредственно на сервере.

Но почему ты вообще пытаешься это сделать? Используя SFTP, протокол гарантирует, что файл будет зашифрован при передаче без каких-либо усилий с вашей стороны. Какую пользу вы видите в добавлении этого дополнительного уровня шифрования?

j snooze

Согласитесь с Ричардом, что не так с шифрованием SFTP? Технически нет ничего плохого в шифровании и загрузке, но чтобы расшифровать его со своей стороны, вам придется вернуть байты обратно к себе. Вы можете дать клиенту приложение для расшифровки, чтобы он мог расшифровать, но в противном случае ваше шифрование будет бесполезным, потому что вам придется загружать байты в unecrypt и повторно загружать незашифрованные байты, что делает первоначальное шифрование бесполезным.

0 Ответов