gpt4 book ai didi

java - 为什么 & 0xff 应用于字节变量

转载 作者:行者123 更新时间:2023-11-30 07:49:32 24 4
gpt4 key购买 nike

为什么 & 0xff 应用于基于时间的 OTP(TOTP,RFC 6238)的引用实现中的字节变量?在我看来,这不会改变值,因为字节数据类型的长度为 8 位。

byte[] hash = hmac_sha(crypto, k, msg);
int offset = hash[hash.length - 1] & 0xf;

int binary =
((hash[offset] & 0x7f) << 24) |
((hash[offset + 1] & 0xff) << 16) |
((hash[offset + 2] & 0xff) << 8) |
(hash[offset + 3] & 0xff);

int otp = binary % DIGITS_POWER[codeDigits];

此外,将XAND 运算符应用于带有0x7f 的第一个元素的原因是什么?它仍然可以生成一个 10 位数字,这比 DIGITS_POWER 中的最大条目 100 000 000 大。

( https://www.rfc-editor.org/rfc/rfc6238 ,第 13 页)

最佳答案

byte b = -5;
System.out.println(b);
System.out.println(b & 0xFF);

这会产生以下输出:

-5
251

当执行 & 时,两个操作数首先被提升为 32 位。 -5 表示为 11111111111111111111111111111011,而 0xFF 只是“末尾有 24 个零和 8 个一”,所以 (-5 ) & 0xFF 给出 11111011(省略前导零)。

关于java - 为什么 & 0xff 应用于字节变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48467832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com