我正在使用C语言编写一个密码项目。我必须编写9个具有多个加密/解密目的的函数。该函数应该能够读取'message.txt'文件中的文本,对消息进行加密/解密(取决于用户输入),然后将结果写入该函数创建的新'code.txt'文件中。用户将给出他想要的一个键(谱号)和模式(密码/解密),该功能将根据Vigenère方法中的另一个密码/解密函数执行。这是我的代码,(有些部分是西班牙语,我很抱歉)首先是密码/解密的功能,然后是读取/写入文件,然后是main()。 (IF MODE == 0 FUNCTION DECIPHERS)。文件写入问题
#include <string.h>
#include <stdio.h>
int vigenereCipher(char *chaine, char *key, char *code, int mode)
{
int i = 0, c = 0;
if (mode != 0) {
for (; i < strlen(chaine); i++) {
if (chaine[i] + key[c] < 256) {
code[i] = chaine[i] + key[c];
c += 1;
} else {
code[i] = chaine[i] + key[c] - 256;
c += 1;
}
if (c == strlen(key)) {
c = 0;
}
}
} else {
for (; i < strlen(chaine); i++) {
if (chaine[i] - key[c] < 0) {
code[i] = chaine[i] - key[c];
c += 1;
} else {
code[i] = chaine[i] - key[c] + 256;
c += 1;
}
if (c == strlen(key)) {
c = 0;
}
}
}
printf("\n %s -> %s \n", chaine, code);
if (*chaine == *chaine) {
printf("\n0\n");
} else {
printf("\n1\n");
}
}
int encryptTextFile(char *key, int mode)
{
char chaine[99999];
char code[99999];
int i;
FILE *archivo1, *archivo2;
archivo1 = fopen("message.txt", "r");
archivo2 = fopen("code.txt", "w");
fscanf(archivo1, "%s", chaine);
vigenereCipher(chaine, key, code, mode);
for (i = 0; i < strlen(chaine); i++) {
fprintf(archivo2, "%c", code[i]);
}
fclose(archivo1);
fclose(archivo2);
}
int main()
{
char key[99999];
int mode;
printf("Enter encryption key: ");
gets(key);
printf("Enter desired mode (1 or 0): ");
scanf("%i", &mode);
encryptTextFile(key, mode);
}
此功能可以加密/解密正确的,但是,当它试图写入结果在“code.txt”文件不写相同的加密/解密字符之前给了。
我该如何纠正这个问题,以便它将相同的字符写入'code.txt'文件中? 谢谢。 (请让我知道你是否需要翻译成英文。)
在'chiffrementVigenere'你在哪里终止你建立的字符串? –
您的代码从MSVC生成6个编译器警告。三个涉及有符号/无符号整数比较。一个人建议'get'已经过时了。两个建议函数在它们应该返回时不返回任何值。请启用所有编译器警告。 –
'请启用所有编译器警告'并在继续之前修复这些问题 – KevinDTimm