You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C语言for循环生成AES SBox时遭遇意外无限循环问题

问题分析与解决方案
  • 核心原因:unsigned char 是无符号8位类型,取值范围为0-255。当循环变量i自增到255后,执行i++会发生无符号溢出,结果回到0,导致循环条件i < 256永远成立,形成无限循环。你之前生成对数/反对数表时没遇到这个问题,大概率是循环终止条件未触及无符号变量的上限值,或是当时使用了有符号类型。

解决方法

方法1:改用int作为循环变量

将循环索引改为int类型,调用sbox()时强制转换为unsigned char,避免溢出:

for (int i = 0; i < 256; i++) {
    printf("%02x ", sbox((unsigned char)i));
}

方法2:调整循环终止条件(保留unsigned char)

利用无符号变量的溢出特性,让循环在i回到0时终止:

unsigned char i = 0;
do {
    printf("%02x ", sbox(i));
    i++;
} while (i != 0);

该方式会执行256次循环(从0到255),当i自增到256时,无符号溢出变为0,触发终止条件。

方法3:使用计数器辅助

用int类型计数器控制循环次数,同时用unsigned char变量传入函数:

unsigned char val = 0;
for (int cnt = 0; cnt < 256; cnt++) {
    printf("%02x ", sbox(val));
    val++;
}

内容的提问来源于stack exchange,提问作者user22268516

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:52:07