一个程序必须是一个密码,有一个符号在两个一半(4 + 4位),在第一半,分为两对,并取代他们的价值观 相互配对(从10将是01,00将是00,使用产生的4位与异或函数的第二部分,请帮助我找到我的代码中的错误
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
unsigned char* encrypt(const char* text) {
int len = strlen(text);
unsigned char* encrypted = (unsigned char*) malloc(len * sizeof(unsigned char));
for (int i = 0; i < len; i++) {
unsigned char c = text[i];
unsigned char first_half = (c >> 4) & 0x0F;
unsigned char second_half = c & 0x0F;
unsigned char swapped_first_half = ((first_half & 0x03) << 2) | ((first_half & 0x0C) >> 2);
unsigned char xor_result = swapped_first_half ^ second_half;
encrypted[i] = (swapped_first_half << 4) | xor_result;
}
return encrypted;
}
int main() {
unsigned char* e;
e = encrypt("Hello world!");
for(int i=0; i < 12;i++) printf("%x ", e[i]);
// Expected output - 80 9c 95 95 96 11 bc 96 b9 95 9d 10
}
1条答案
按热度按时间xtfmy6hx1#
在源代码中,程序没有执行此步骤:
...替换它们的值 相互配对(从10开始将为01,从00开始将为00...
程序执行以下步骤:
1.把前半部分和后半部分分开。
1.将前半部分的前两位与后半部分的后两位交换。
1.将前半部分异或为后半部分。
1.将交换后的前半部分与异或后的后半部分重新组装。
步骤2应为:
1.在前半部分的四个位中,将前两位和后两位分开。在这两个位中的每一位中,交换位。(0变为0,1变为2,2变为1,3变为3。)将两对位重新组合为四个位。