如何在 Java 中表示 uint8 文字
How do I represent uint8 literals in Java
我正在尝试重新实现一些在 Java 中使用 libsodium 的代码。
原始代码声明了一个 uint8 类型的数组:
#define SECRET ((uint8_t[]){ 0xAA, 0xBB, 0xCC ... }) // not the real secret!
并将其提供给 libsodium 的 crypto_hash_sha256_update
我在 Java 中实现它的挑战是 Java 没有无符号字节,所以我实际上不能将 0xAA
键入一个字节。
我尝试过的事情:
- 将我的数组声明为 short/int:我认为这会因为 0 填充而中断
- 将文字声明为
0b11110000...
格式,这没有给出正确的答案(我有一些来自原始实现的测试数据)
- 声明一个
char []
数组并连接文字:final char[] salt = { 0xAABB, 0xCCDD, ...}`,也没有给出正确答案
编辑
这是我的短暂尝试
final short[] salt = { 0xAA, 0xBB, ...};
final Hasher hasher = Hashing.sha256().newHasher();
hasher.putLong(input);
for (int i=0; i < salt.length; i++) {
hasher.putShort(salt[i]);
}
return hasher.hash().asBytes();
看起来我的原始代码有效
final short[] salt = { 0xAA, 0xBB, ...};
final Hasher hasher = Hashing.sha256().newHasher();
hasher.putLong(input);
for (int i=0; i < salt.length; i++) {
hasher.putShort(salt[i]);
}
return hasher.hash().asBytes();
问题是我忘记在比较之前左填充我的结果
我正在尝试重新实现一些在 Java 中使用 libsodium 的代码。 原始代码声明了一个 uint8 类型的数组:
#define SECRET ((uint8_t[]){ 0xAA, 0xBB, 0xCC ... }) // not the real secret!
并将其提供给 libsodium 的 crypto_hash_sha256_update
我在 Java 中实现它的挑战是 Java 没有无符号字节,所以我实际上不能将 0xAA
键入一个字节。
我尝试过的事情:
- 将我的数组声明为 short/int:我认为这会因为 0 填充而中断
- 将文字声明为
0b11110000...
格式,这没有给出正确的答案(我有一些来自原始实现的测试数据) - 声明一个
char []
数组并连接文字:final char[] salt = { 0xAABB, 0xCCDD, ...}`,也没有给出正确答案
编辑 这是我的短暂尝试
final short[] salt = { 0xAA, 0xBB, ...};
final Hasher hasher = Hashing.sha256().newHasher();
hasher.putLong(input);
for (int i=0; i < salt.length; i++) {
hasher.putShort(salt[i]);
}
return hasher.hash().asBytes();
看起来我的原始代码有效
final short[] salt = { 0xAA, 0xBB, ...};
final Hasher hasher = Hashing.sha256().newHasher();
hasher.putLong(input);
for (int i=0; i < salt.length; i++) {
hasher.putShort(salt[i]);
}
return hasher.hash().asBytes();
问题是我忘记在比较之前左填充我的结果