如何以十六进制形式输出ASCII?AES加密结果输出至屏幕与文件
嘿,你的AES加密已经正常跑通了,这太棒了!针对你要把加密结果同时输出到屏幕和TXT文件,以及以十六进制形式输出ASCII的需求,我给你整理了具体的实现方案:
1. 同时输出加密结果到屏幕与TXT文件
你现有的验证循环已经能正确输出十六进制加密结果,只需要在循环里同时写入文件即可。这里有两种常用方式:
方式一:循环中实时双输出
直接在你的现有循环里,同时调用printf(输出到屏幕)和fprintf(输出到文件),格式保持一致:
// 先打开目标文件,记得检查是否成功打开 FILE *output_file = fopen("encrypted_result.txt", "w"); if (output_file == NULL) { perror("Failed to open output file"); return 1; // 处理打开失败的情况 } // 你的加密结果输出循环,修改为同时输出到屏幕和文件 for (int j = 0; j < object.words * 4; j++) { // 输出到控制台 printf("%02x ", Encryptor.out[j]); // 输出到TXT文件,格式和屏幕完全一致 fprintf(output_file, "%02x ", Encryptor.out[j]); } // 补充换行,让输出更整洁 printf("\n"); fprintf(output_file, "\n"); // 记得关闭文件,避免资源泄漏 fclose(output_file);
方式二:先拼接成字符串再一次性输出
如果加密数据量较大,先把所有十六进制内容拼接成一个字符串,再一次性输出到屏幕和文件会更高效:
#include <stdio.h> #include <stdlib.h> #include <string.h> // 计算所需的字符串长度:每个字节占2个十六进制字符+1个空格,最后加换行和结束符 int output_byte_count = object.words * 4; char *hex_result = malloc(output_byte_count * 3 + 2); if (hex_result == NULL) { perror("Failed to allocate memory"); return 1; } char *str_ptr = hex_result; for (int j = 0; j < output_byte_count; j++) { // 逐个拼接十六进制字符 str_ptr += sprintf(str_ptr, "%02x ", Encryptor.out[j]); } // 把最后一个空格替换成换行,让格式更规范 hex_result[strlen(hex_result) - 1] = '\n'; // 输出到屏幕 printf("%s", hex_result); // 输出到文件 FILE *output_file = fopen("encrypted_result.txt", "w"); if (output_file != NULL) { fprintf(output_file, "%s", hex_result); fclose(output_file); } // 释放分配的内存 free(hex_result);
2. 以十六进制形式输出ASCII文本
如果你需要把原始ASCII文本(比如你的待加密字符串"im so glad this works")转换成十六进制形式输出,可以用下面的代码:
char plaintext[] = "im so glad this works"; // 输出到屏幕 printf("Plaintext in hex: "); for (int i = 0; plaintext[i] != '\0'; i++) { // 强制转成unsigned char,避免ASCII扩展字符被当成负数处理 printf("%02x ", (unsigned char)plaintext[i]); } printf("\n"); // 同时输出到文件的话,同样用fprintf FILE *plaintext_hex_file = fopen("plaintext_hex.txt", "w"); if (plaintext_hex_file != NULL) { fprintf(plaintext_hex_file, "Plaintext in hex: "); for (int i = 0; plaintext[i] != '\0'; i++) { fprintf(plaintext_hex_file, "%02x ", (unsigned char)plaintext[i]); } fprintf(plaintext_hex_file, "\n"); fclose(plaintext_hex_file); }
小提示
- 打开文件时,
"w"模式会覆盖原有文件内容,如果需要追加内容可以改用"a"模式 - 所有文件操作后一定要记得调用
fclose()关闭文件,避免资源泄漏 - 内存分配后要记得用
free()释放,防止内存泄漏
内容的提问来源于stack exchange,提问作者James Juchau
相关产品推荐
相关产品推荐

