小编Chr*_*ris的帖子

Java中"x == 7"到1(真)或0(假)的快速恒定时间评估

我想将一个加密函数从C移植到Java.该函数必须在恒定时间内运行,因此不允许使用条件分支(并且不允许基于x的表查找).

原始的C代码是:

int x,result;
...
result = (x==7);
...
Run Code Online (Sandbox Code Playgroud)

因此,如果'x == 7','result'设置为1,否则设置为0.然后将'result'变量用于进一步的计算.

我现在正在寻找将其转换为Java的最佳方法.就像在Java表达式中评估为布尔值而不是整数一样,必须使用运算符来模拟上述情况.

我目前正在使用

int x,result;
...
result = (1<<(x-7))&1;
...
Run Code Online (Sandbox Code Playgroud)

这对我来说很好,因为我的x在{0,...,15}范围内.(请注意,shift函数仅使用低5位,因此当x太大时,您将得到误报.)

表达式将被评估数百万次,因此如果有一个聪明的解决方案只使用2个运算符而不是3个运算符,这将使整体计算更快.

java performance bit-manipulation constant-time

7
推荐指数
3
解决办法
1294
查看次数