木原晶 2021-11-19 11:54 采纳率: 100%
浏览 14
已结题

各位看一看,这加解密是不是自相矛盾了,加密函数将密文设置为了8的整数倍,解密的时候却判断如果密文长度为8的整数倍就返回-1

这里是加密函数

if (data_in_len <= 0)
{
    g_encryptfailtime++;
    *data_out_len = 0;
    crypto_print(Debug_error)("encode data_in_len error!");
    sendalarm_smw(TYPE_ENCODE_DATA_IN_LEN,ENCODE_DATA_IN_LEN);
    if (card_node_type)
    {
        put_msg_to_queue(serial_num,0,data_in_len,Crypto_Status_Value_Parameter_Fail);
    }
    return -1;
}

if (CRYPTO_AES_ECB == crypto_type)
{
    return card_aes_encode(data_in,data_in_len,data_out,data_out_len,serial_num,r1);
}

int padding_len, i;

//明文填充成8的整数倍
unsigned char *data_in_temp;
padding_len = (data_in_len / PRESENT_BLOCK_SIZE + 1) * PRESENT_BLOCK_SIZE;
*data_out_len = padding_len;
data_in_temp = (unsigned char *)calloc(padding_len, sizeof(unsigned char));
memcpy(data_in_temp, data_in, data_in_len);
if(0 != (data_in_len % PRESENT_BLOCK_SIZE))
{    
    for(i = data_in_len; i < padding_len; i++)
        data_in_temp[i] = padding_len - data_in_len;
}
else
{
    for(i = data_in_len; i < padding_len; i++)
        data_in_temp[i] = PRESENT_BLOCK_SIZE; //这里填充了data_in_temp 加了几个数字
}

}
下面是解密函数

if ((data_in_len<=0) || (data_in_len % PRESENT_BLOCK_SIZE)) //为1执行,所以需要大于0且不为8的整数倍 但是最后会乘8,这是几个意思?
{
    g_decryptfailtime++;
    *data_out_len = 0;
    crypto_print(Debug_error)("decode data_in_len error!\n");
    sendalarm_smw(TYPE_DECODE_DATA_IN_LEN,DECODE_DATA_IN_LEN);
    if (card_node_type)
    {
        put_msg_to_queue(serial_num,1,data_in_len,Crypto_Status_Value_Parameter_Fail);
    }
    return -1;
}

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月27日
    • 创建了问题 11月19日

    悬赏问题

    • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
    • ¥20 怎么用dlib库的算法识别小麦病虫害
    • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
    • ¥15 java写代码遇到问题,求帮助
    • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
    • ¥15 有了解d3和topogram.js库的吗?有偿请教
    • ¥100 任意维数的K均值聚类
    • ¥15 stamps做sbas-insar,时序沉降图怎么画
    • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
    • ¥15 关于#Java#的问题,如何解决?