我在C编程语言中使用RSA算法加密了一条消息。我想使用相同的密钥加密保存在特定文件夹中的多个文件。我在openSSL环境中工作。我用来加密特定消息的代码是,
// Get the message to encrypt
printf("Message to encrypt: ");
fgets(msg, KEY_LENGTH-1, stdin);
msg[strlen(msg)-1] = '\0';
// Encrypt the message
encrypt = malloc(RSA_size(keypair));
int encrypt_len;
err = malloc(130);
if((encrypt_len = RSA_public_encrypt(strlen(msg)+1, (unsigned char*)msg, (unsigned char*)encrypt,
keypair, RSA_PKCS1_OAEP_PADDING)) == -1) {
ERR_load_crypto_strings();
ERR_error_string(ERR_get_error(), err);
fprintf(stderr, "Error encrypting message: %s\n", err);
goto free_stuff;
}
现在我想使用 RSA算法加密包含许多文件的文件夹,使用 C
中的相同公钥提前致谢!
答案 0 :(得分:0)
您可以在基于UNIX的Oses in this SO question中找到有关如何遍历目录的信息。
如果您需要多平台,可以在StackOverflow here中找到它。
也许对你来说最好的建议是学习如何确定你的需求并做一些好的研究。
答案 1 :(得分:0)
您需要使用opendir
和readdir
函数打开目录并遍历其中的文件。然后,对于每个文件名,检查它是否是常规文件,如果是,请将其打开并进行加密。
文件很可能大于RSA密钥大小,因此您需要对其进行加密。
这是一个简单的例子:
void encrypt_files(char *dirname)
{
DIR *dir;
struct dirent *de;
int rval;
struct stat statbuf;
FILE *f;
if ((dir = opendir(dirname)) == NULL) {
perror("Failed to open directory %s", dirname);
return;
}
// always reset errno before calling readdir
// otherwise a false error could be reported when you reach the end of the directory
while ((errno = 0, de = readdir(dir)) != NULL) {
rval = lstat(de->d_name, &statbuf);
if (rval == -1) {
perror("Error getting file status for %s", de->d_name);
return;
}
if (S_ISREG(statbuf.st_mode)) {
f = fopen(de->d_name, "r");
if (f == NULL) {
perror("Error opening file");
return;
}
// read from f and encrypt
fclose(f);
}
}
closedir(dir);
}