是否可以在不泄露我的文件的情况下将密码保存在c++文件中

Is it possible to save a password in a c++ file without leaking my file

本文关键字:文件 密码 情况下 保存 存在 c++ 是否 我的      更新时间:2024-09-30

我正在用c++编写一个ftp上传器文件,如果不在代码中输入密码,我就无法使用该文件登录ftp服务器。这是我的代码:

void UploadFTP(string uploadFile) {
ofstream ftpFile;
ftpFile.open("ftpcmd.dat", ios_base::app);
ftpFile << "user <USER>n";
ftpFile << "<PASSWORD>n";
ftpFile << "binn";
ftpFile << "put " + uploadFile + "n";
ftpFile << "quit";
ftpFile.close();
system("ftp -n -s:ftpcmd.dat <FTPSERVER>");
remove("ftpcmd.dat"); 
} 

如何将登录凭据放在上面写着<PASSWORD>的位置,而不实际将密码放在那里。

此外,如果我能在上面写着system("ftp -n -s:ftpcmd.dat <FTPSERVER>");的行上得到任何提示,我想试着离开系统命令。

如何在不将密码输入代码的情况下使用文件登录ftp服务器。

您可以选择以下选项之一:

  • 将FTP服务器配置为不需要密码
  • 让用户输入密码
  • 将密码存储在程序读取的单独文件中

如果您想防止用户发现密码,那么没有完整的解决方案。您最多可以模糊密码。


我想尝试离开系统命令。

C++没有用于FTP的标准API。您可以在此处找到规格:https://www.rfc-editor.org/rfc/rfc959.您可能还需要咨询RFC,该RFC会更新该RFC以支持被动模式等附加功能。

C++甚至没有运行FTP的TCP的标准API。但是,您的操作系统可能会为您提供TCP API。

-s选项只是从文本文件中获取命令,并将其解释为用户键入的命令。ftp程序以纯文本形式接收用户的密码,无论是来自STDIN还是来自文件,因此无法在.dat文件中隐藏密码。

解决方案是根本不使用system()

在Windows上,您可以使用CreateProcess(),它允许您提供自己的重定向STDIN管道,您可以根据需要向其写入数据。在'Nix系统上,您可以使用pipe()+dup2()来实现相同的效果。

这样,您的命令数据只在内存中,而不会在文件中。请参阅创建具有重定向输入和输出的子进程,Linux 3.0:使用管道stdin/stdout执行子进程等。

或者,您可以使用实际的FTP客户端库。例如,Windows的WinInet库和libcurl库都支持FTP操作。还有很多其他第三方库也支持FTP。

或者,您可以使用目标平台的通用TCP库,直接在自己的代码中实现FTP协议。