0

我正在使用SFTP API( jsacpe) 进行文件传输。

这些文件基本上是带有扩展名的文本内容.log, .dat.txt.jrn。在传输文件之前,我正在执行AES encryption.

文件传输模式为“自动”。

示例代码:

    SshParameters sshParameters = new SshParameters("127.0.0.1",22,"User Name","Password");
    SshHostKeys sshHostKeys = new SshHostKeys();
    InetAddress address = InetAddress.getByName("127.0.0.1);
    sshHostKeys.addKey(address, "finger print");
    HostKeyVerifier keyVerifier = new HostKeyFingerprintVerifier(sshHostKeys);
    sshParameters.setHostKeyVerifier(keyVerifier);

    sftp = new Sftp(sshParameters);
    sftp.setTimeout(30 * 1000);
    sftp.setDownloadBlockSize(300);
    sftp.setUploadBlockSize(300);
    sftp.setSendBufferSize(300);
    sftp.setReceiveBufferSize(300);
    sftp.addSftpListener(this);
    sftp.connect();

    **sftp.setAuto(true);**

我想知道 sftp 将以哪种模式(ASCII 或二进制)传输文件。

如果我们将 sftp api 设置为“自动”,sftp api 将如何决定 ftp 模式,因为每组文件的扩展类型都不同。

May be this is an basic question but i want to understand.

提前致谢!

4

1 回答 1

0

SFTP 协议默认使用二进制模式,直到 SFTP 版本 4 它甚至没有 ASCII 模式。一些软件(包括我们的 SecureBlackbox 库)可以模拟 ASCII 模式,但这种模拟不是很可靠,因为它不知道目标系统使用什么 EOL 约定。

现在正如评论中所说,你最好坚持二进制模式,不要依赖任何自动的东西。我可以想象,在某些小文件上,自动检测可能会失败,从而破坏您的数据。

于 2013-10-22T06:56:53.933 回答