文件传输 sftp 安全吗?

文件传输 sftp 安全吗?

假设我有一个包含机密信息的文本文件。我想通过网站上设置的 sftp 将其从美国设施传输到法国设施。

文件传输安全吗?

答案1

来自维基百科文章:SSH 文件传输协议

该协议本身不提供身份验证和安全性;它期望底层协议能够确保这一点。SFTP 最常用作 SSH 协议版本 2 实现的子系统,由同一工作组设计。但是,可以通过 SSH-1(一些实现支持这一点)或其他数据流运行它。通过 SSH-1 运行 SFTP 服务器与平台无关,因为 SSH-1 不支持子系统的概念。想要连接到 SSH-1 服务器的 SFTP 客户端需要知道服务器端 SFTP 服务器二进制文件的路径。

所以这实际上取决于您的设置方式。

如果您有兴趣,请阅读整篇文章。

答案2

正如 Davide Piras 指出的那样,SFTP 或更准确地说是底层 SSH 协议非常安全。

但如果我理解正确的话,您希望使用某种基于 Web 的 SFTP 客户端。这意味着您还必须保护客户端和用于传输文件的网站之间的连接。

你不应该试图确保传输安全(无论如何你都应该这样做),而应该加密数据本身(例如使用 PGP 或基努),传输该加密文件并最终在目标系统上解密。

答案3

尽管 SSL 和 TLS 之间存在差异,导致它们无法相互操作,但就安全性而言,它们通常被认为是平等的。主要区别在于,虽然 SSL 连接以安全性开始,然后直接进行安全通信,但 TLS 连接首先以不安全的“hello”开始,然后仅当客户端和服务器之间的握手成功后才切换到安全通信。如果 TLS 握手因任何原因失败,则永远不会创建连接。

如果你使用 Windows(就像我一样),那么在这种情况下,你可能只需要一个支持 SFTP 的非 TLS 服务器(基于 SSH),而不是 FTPS 服务器(例如 FileZilla),例如空 FTP 服务器或者我使用的方法:带有 Tunnelier 客户端的 WinSSHD

答案4

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace Encryption
{
    class Program
    {
        static void Main(string[] args)
        {
            EncryptFile(@"C:\a.txt", @"C:\b.txt","password");
            DecryptFile(@"C:\b.txt", @"C:\decrypted.txt",@"password");
        }
        public static void EncryptFile(string inputFile, string outputFile,string password)
        {

            try
            {

                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(Exception e)
            {
                Console.WriteLine(e);
            }
        }

        public static void DecryptFile(string inputFile, string outputFile,string password)
        {

            {


                UnicodeEncoding UE = new UnicodeEncoding();
                byte[] key = UE.GetBytes(password);

                FileStream fsCrypt = new FileStream(inputFile, FileMode.Open);

                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();

            }
        }

    }
}

相关内容