我想将加密函数从 C 移植到 Java。该函数必须在恒定时间内运行,因此不允许有条件分支(也不允许基于 x 的表查找)。
原始C代码是:
int x,result;
...
result = (x==7);
...
因此,如果 'x==7' 则将 'result' 设置为 1,否则设置为 0。然后在进一步的计算中使用“结果”变量。
我现在正在寻找将其转换为 Java 的最佳方法。正如在 Java 表达式中计算为布尔值而不是整数一样,必须使用运算符来模拟上述情况。
我目前使用
int x,result;
...
result = (1<<(x-7))&1;
...
这对我来说很好,因为我的 x 在 {0,...,15} 范围内。(请注意,移位函数仅使用低 5 位,因此当 x 太大时您会得到误报。)
该表达式将被计算数百万次,因此如果有一个聪明的解决方案只使用 2 个运算符而不是 3 个,这将使整体计算更快。