我如何用Java表示uint8文字

时间:2018-05-10 22:02:52

标签: java sha primitive libsodium

我正在尝试重新实现一些在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,...}`,并没有给出正确的答案

EDIT 这是我的短暂尝试

    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();

1 个答案:

答案 0 :(得分:0)

看起来我的原始代码有效

Object(std::unique_ptr<T>&& v) : value(static_cast<std::unique_ptr<T>*>(std::move(&v))) {}

问题是我在比较之前忘记了左边的结果