关于#c语言#的问题:文件加密程序:将待加密文件以二进制打开

文件加密程序:将待加密文件以二进制打开,读入32个字节,分别与口令异或,在将4、5、6三个字分别与(0x四个a)异或,即完成加密,执行第二次就解密。
一点都不会,希望提供思路

参考:https://blog.csdn.net/qq_72111942/article/details/126477652
只不过你需要把0xaaaaaa插入到你的口令的456中

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7706680
  • 你也可以参考下这篇文章:有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。 读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表
  • 除此之外, 这篇博客: 大学生C语言期末必背题目,考研必背题目,找工作基础题目中的 11、已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    整了点花活,但是程序没问题,一样用。。。

    //插入排序
    void sort(int* x, int n)
    {
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = 1+i; j < n; j++)
    		{
    			if (x[i] < x[j])
    			{
    				int temp = x[i];
    				x[i] = x[j];
    				x[j] = temp;
    
    			}
    		}
    	}
    	for (int i = 0; i < n; i++)
    	{
    		printf("%d ", x[i]);
    	}
    }
    int main()
    {
    	int n = 0;
    	scanf("%d", &n);
    	int *x = (int*)malloc(n*sizeof(int));
    	int i = 0;
    	for (i = 0; i < n; i++)
    	{
    		scanf("%d", &x[i]);
    	}
    	int num = 0;
    	scanf("%d", &num);
    	x = (int*)realloc(x, (n+1)*sizeof(int));
    	x[i] = num;
    	sort(x, n+1);
    	return 0;
    }

     运行结果:

     

  • 您还可以看一下 姚海陆老师的中小型企业创业初期选择、选购域名、虚拟主机、服务器攻略大全课程中的 06-阿里云服务器免费申请攻略小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    思路和步骤

    1. 打开待加密文件,并创建一个新的文件来保存加密后的数据。
    2. 读取待加密文件的前32个字节,并将其存储到一个缓冲区中。
    3. 将缓冲区的数据与口令进行异或操作。
    4. 将第4、5、6个字节分别与0xaaaa进行异或操作。
    5. 将加密后的数据写入到新文件中。
    6. 关闭文件。
    7. 执行程序时,进行解密操作。
    8. 打开加密后的文件,并创建一个新的文件来保存解密后的数据。
    9. 读取加密后的文件的数据。
    10. 将缓冲区的数据与口令进行异或操作。
    11. 将第4、5、6个字节分别与0xaaaa进行异或操作。
    12. 将解密后的数据写入到新文件中。
    13. 关闭文件。

    下面是使用C语言来实现以上步骤的示例代码:

    #include <stdio.h>
    
    void encryptFile(const char* inputFile, const char* outputFile, const char* password) {
        FILE* input = fopen(inputFile, "rb");
        FILE* output = fopen(outputFile, "wb");
        if (input == NULL || output == NULL) {
            printf("无法打开文件\n");
            return;
        }
    
        unsigned char buffer[32];
        fread(buffer, sizeof(unsigned char), 32, input);
    
        // 与口令进行异或操作
        for (int i = 0; i < sizeof(buffer); i++) {
            buffer[i] ^= password[i % sizeof(password)];
        }
    
        // 将第4、5、6个字节与0xaaaa进行异或操作
        buffer[3] ^= 0xaa;
        buffer[4] ^= 0xaa;
        buffer[5] ^= 0xaa;
    
        fwrite(buffer, sizeof(unsigned char), 32, output);
    
        fclose(input);
        fclose(output);
        printf("加密完成\n");
    }
    
    void decryptFile(const char* inputFile, const char* outputFile, const char* password) {
        FILE* input = fopen(inputFile, "rb");
        FILE* output = fopen(outputFile, "wb");
        if (input == NULL || output == NULL) {
            printf("无法打开文件\n");
            return;
        }
    
        unsigned char buffer[32];
        fread(buffer, sizeof(unsigned char), 32, input);
    
        // 将第4、5、6个字节与0xaaaa进行异或操作
        buffer[3] ^= 0xaa;
        buffer[4] ^= 0xaa;
        buffer[5] ^= 0xaa;
    
        // 与口令进行异或操作
        for (int i = 0; i < sizeof(buffer); i++) {
            buffer[i] ^= password[i % sizeof(password)];
        }
    
        fwrite(buffer, sizeof(unsigned char), 32, output);
    
        fclose(input);
        fclose(output);
        printf("解密完成\n");
    }
    
    int main() {
        const char* inputFile = "./input.txt";
        const char* encryptedFile = "./encrypted.txt";
        const char* decryptedFile = "./decrypted.txt";
        const char* password = "password";
    
        encryptFile(inputFile, encryptedFile, password);
        decryptFile(encryptedFile, decryptedFile, password);
    
        return 0;
    }
    

    以上代码中,encryptFile函数用于加密文件,decryptFile函数用于解密文件。在main函数中,调用encryptFile函数将input.txt文件加密,并保存到encrypted.txt文件中;然后调用decryptFile函数将encrypted.txt文件解密,并保存到decrypted.txt文件中。

    请注意,以上代码中的口令password是一个字符串,如果口令长度不足32个字节,则会重复使用口令的字符来进行异或操作。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^