Как получить 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 и повторно загружать незашифрованные байты, что делает первоначальное шифрование бесполезным.