该行的含义:buf =((buf<< 11)|(buf>>> 21));

时间:2016-05-16 08:24:21

标签: java cryptography gost28147

我使用this代码进行加密家庭作业分配,无法理解第59行

感谢帮助者。

1 个答案:

答案 0 :(得分:1)

它是一样的;向左旋转11位以获得int值。

底部21位向上移动11位,而前11位向下移动21位。

这是散列中使用的常见模式,因为它可以快速重新排列数字的位而不会丢失随机性。

Source for Integer.rotateLeft

  

返回通过将指定的int值的二进制补码二进制表示向右旋转指定的位数而获得的值。 (位移出右手,或低位,侧面重新进入左侧,或高位。)

     

请注意,具有负距离的右旋转等效于左旋转:rotateRight(val,-distance)== rotateLeft(val,distance)。另请注意,旋转32的任意倍数都是无操作,因此即使距离为负,也可以忽略旋转距离的最后五位以外的所有位:rotateRight(val,distance)== rotateRight(val,distance & 0x1F)。

     

返回:   通过将指定的int值的二进制补码二进制表示旋转指定的位数来获得的值。

public static int rotateRight(int i, int distance) {
    return (i >>> distance) | (i << -distance);
}