crypt(3) 导致分段错误
crypt(3) causing segmentation fault
我正在尝试制作一个小程序来打开一个文件,读取每一行,使用 crypt(3)
算法对该行进行哈希处理,然后将其写回输出文件。
但是,每当我尝试使用 crypt()
方法时,它都会导致段错误。谁能告诉我我做错了什么?谢谢。
我用来编译代码的命令:
g++ hasher.cpp -o hasher -lcrypt
我的代码:
#include <iostream> // User I/O
#include <fstream> // File I/O
#include <vector> // String array
#include <cstdlib> // Exit method
#include <crypt.h> // Crypt(3)
// Input & Output file names
std::string input_file;
std::string output_file;
// Plaintext & Hashed passwords
std::vector<std::string> passwords;
// Read input and output files
void read_file_names()
{
std::cout << "Input: ";
std::getline(std::cin, input_file);
std::cout << "Output: ";
std::getline(std::cin, output_file);
}
// Load passwords from input file
void load_passwords()
{
// Line / Hash declarations
std::string line;
std::string hash;
// Declare files
std::ifstream f_input;
std::ifstream f_output;
// Open files
f_input.open(input_file.c_str());
// Check if file can be opened
if (!f_input) {
std::cout << "Failed to open " << input_file << " for reading." << std::endl;
std::exit(1);
}
// Read all lines from file
while(getline(f_input, line))
{
// This line causes a segmentation fault
// I have no idea why
hash = crypt(line.c_str(), "");
std::cout << "Hashed [" << hash << "] " << line << std::endl;
}
}
// Main entry point of the app
int main()
{
read_file_names();
load_passwords();
return 0;
}
调用 crypt() 的第二个参数(盐)采用字符串。您应该传递一个至少包含 2 个字符的字符串才能使其正常工作(如 the manual)。
例如:crypt(line.c_str(), "Any string here");
我正在尝试制作一个小程序来打开一个文件,读取每一行,使用 crypt(3)
算法对该行进行哈希处理,然后将其写回输出文件。
但是,每当我尝试使用 crypt()
方法时,它都会导致段错误。谁能告诉我我做错了什么?谢谢。
我用来编译代码的命令:
g++ hasher.cpp -o hasher -lcrypt
我的代码:
#include <iostream> // User I/O
#include <fstream> // File I/O
#include <vector> // String array
#include <cstdlib> // Exit method
#include <crypt.h> // Crypt(3)
// Input & Output file names
std::string input_file;
std::string output_file;
// Plaintext & Hashed passwords
std::vector<std::string> passwords;
// Read input and output files
void read_file_names()
{
std::cout << "Input: ";
std::getline(std::cin, input_file);
std::cout << "Output: ";
std::getline(std::cin, output_file);
}
// Load passwords from input file
void load_passwords()
{
// Line / Hash declarations
std::string line;
std::string hash;
// Declare files
std::ifstream f_input;
std::ifstream f_output;
// Open files
f_input.open(input_file.c_str());
// Check if file can be opened
if (!f_input) {
std::cout << "Failed to open " << input_file << " for reading." << std::endl;
std::exit(1);
}
// Read all lines from file
while(getline(f_input, line))
{
// This line causes a segmentation fault
// I have no idea why
hash = crypt(line.c_str(), "");
std::cout << "Hashed [" << hash << "] " << line << std::endl;
}
}
// Main entry point of the app
int main()
{
read_file_names();
load_passwords();
return 0;
}
调用 crypt() 的第二个参数(盐)采用字符串。您应该传递一个至少包含 2 个字符的字符串才能使其正常工作(如 the manual)。
例如:crypt(line.c_str(), "Any string here");