mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2026-05-29 18:57:11 +08:00
fix(RC4): 修复 initSBox 中运算符优先级错误导致加密结果偏差
原代码:`j = (j + sbox[i] + (key[i % key.length]) & 0xFF) % SBOX_LENGTH` 由于 Java 中 `&` 的优先级低于 `+`,实际计算等同于: `j = ((j + sbox[i] + key[i % key.length]) & 0xFF) % 256` 而标准 RC4 算法要求先将 byte 转为无符号整数再参与加法: `j = (j + sbox[i] + (key[i % key.length] & 0xFF)) % SBOX_LENGTH` 当 key 中含有非 ASCII 字符(如中文,UTF-8 编码后可能产生负 byte 值)时, 原实现的 sbox 初始化结果与标准 RC4 不一致,导致加密结果错误。
This commit is contained in:
@@ -246,7 +246,8 @@ public class RC4 implements Serializable {
|
||||
}
|
||||
|
||||
for (int i = 0; i < SBOX_LENGTH; i++) {
|
||||
j = (j + sbox[i] + (key[i % key.length]) & 0xFF) % SBOX_LENGTH;
|
||||
// fix: 运算符优先级修正,& 0xFF 应先与 key 字节值进行位与运算,再参与加法,避免有符号 byte 导致计算偏差
|
||||
j = (j + sbox[i] + (key[i % key.length] & 0xFF)) % SBOX_LENGTH;
|
||||
swap(i, j, sbox);
|
||||
}
|
||||
return sbox;
|
||||
|
||||
Reference in New Issue
Block a user