C语言 位运算

dsf9zpds  于 2023-03-07  发布在  其他
关注(0)|答案(1)|浏览(154)

一个程序必须是一个密码,有一个符号在两个一半(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
    
}
xtfmy6hx

xtfmy6hx1#

在源代码中,程序没有执行此步骤:
...替换它们的值 相互配对(从10开始将为01,从00开始将为00...
程序执行以下步骤:
1.把前半部分和后半部分分开。
1.将前半部分的前两位与后半部分的后两位交换。
1.将前半部分异或为后半部分。
1.将交换后的前半部分与异或后的后半部分重新组装。
步骤2应为:
1.在前半部分的四个位中,将前两位和后两位分开。在这两个位中的每一位中,交换位。(0变为0,1变为2,2变为1,3变为3。)将两对位重新组合为四个位。

相关问题