当前位置: 首页 > 知识库问答 >
问题:

我从没见过加密。这个C加密片段是做什么的?

钱华晖
2023-03-14
typedef int int32;
typedef char int8;

void change_it(int8 *output, int8 *input_1, const int8 *input_2, int32 length)
{
    int32 i = 0;

    for(i=0; i<length; i++)
    {
        output[i] = (int8)(input_1[i] ^ input_2[i]);
    }
    return;
}
void itoa( int32 num, int8  *alpha, int32 radix )
{
    if( radix == 10 )
    {
        sprintf(alpha, "%i", num);
    }
    else if( radix == 16 )
    {
        sprintf(alpha, "%X", num);
    }
}

这是main调用的主要运行函数。它执行一些奇怪的按位操作,然后调用change_it 4次。这是最难住我的部分。

int8 *modify_it(int32 modifier, const int8  *input_1, int32 length)
{
    int8  leading[3];
    int32 i_leading;
    int8 * temp_string = NULL;
    int8 * ret;
    int32 i = 0;

    itoa(modifier/2, leading, 10);
    i_leading = atoi(leading);

    temp_string = (int8 *) malloc(8);
    ret = (int8 *) malloc(length);
    memset(temp_string, 0, 8);
    temp_string[0] = 0;

    if( (modifier+1)%2 == 0 ) {
        temp_string[0] = (int8)((i_leading<<4) + 8);
    }
    else {
        temp_string[0] = (int8)(i_leading<<4);
    }

    for(i=0; i<(length>>3); i++)
    {
        change_it(ret+i*8, temp_string, input_1+i*8, 8);
    }
    free(temp_string);

    return ret;
}

最后,但绝不是最不重要的,启动它的主要功能。

int main(int argc, char **argv) {

    int8 data[32];
    memset(data, 0x0A, sizeof(data));

    int8 *resp = modify_it(0xFF, data, sizeof(data));

    free(resp);
    system("PAUSE");
    return 0;
}

共有1个答案

郑卜鹰
2023-03-14

从根本上说,这是--换个更好的说法--混淆输入。

这是一个非常业余的尝试,如果有人在保护和存储数据方面失败的话。

有很多错误,比如清除一个数组(这可以在使用calloc分配时完成),然后通过“手动”清除它的一部分来“确保”再次清除它。有这么多很多事情不对,这让我想吐又想笑。

 类似资料:
  • 下面的是一段密码,我也知道解密后是什么?但是怎么知道他是什么加密算法生成的? 61LaNaqd2rmtAxAsJs94hw==

  • 本文向大家介绍什么是加密货币?相关面试题,主要包含被问及什么是加密货币?时的应答技巧和注意事项,需要的朋友参考一下 回答:加密货币是一种数字资产,可以用作使用加密功能进行金融交易的交换媒介。加密货币利用区块链技术获得透明度,去中心化和不变性。加密货币可使用公钥和私钥在两方之间直接发送,而手续费极低。

  • 本文向大家介绍什么是JavaScript AES加密?,包括了什么是JavaScript AES加密?的使用技巧和注意事项,需要的朋友参考一下 AES加密是高级加密标准(AES),用于加密应用程序中的数据。您可以使用JavaScript库Forge来执行AES加密。 安装NPM并像这样安装 缩小,以便我们可以在项目中使用它, 现在,使用AES-CBC 128位加密密码。创建一个键并生成。 例如,尝

  • 问题内容: 我正在尝试在C#中加密某些(cookie)数据,然后在PHP中对其进行解密。我选择使用Rijndael加密。我几乎可以正常工作了,只是只有部分文本被解密了! 这是我正在加密的文本(JSON)(已删除敏感信息): 因此,我登录到C#应用程序,该应用程序从存储的Key和IV创建/编码cookie,然后重定向到应该解密/读取cookie的PHP应用程序。当我解密cookie时,它会像这样显示

  • 问题内容: 我一点也不了解加密。但是我需要。怎么样? 假设您有一个节点系统,这些节点通过异步消息在网络上相互通信。节点不维护有关其他节点的会话信息(这是设计限制)。 假设您要确保只有您的节点可以读取正在发送的消息。我相信加密是解决方案。 由于节点不维护会话,并且通信必须以无状态,无连接的方式进行,因此我猜想排除了非对称加密。 所以这是我想做的: 消息作为UDP数据报发送 每封邮件都包含一个使邮件有