3

Javaで次の.NETコードを複製しようとしています

https://github.com/LogosBible/Logos.Utility/blob/master/src/Logos.Utility/GuidUtility.cs

Java で同等のコードを記述しましたが、最終的な GUID/UUID の値が異なります

Java で行った変更 - UUID をバイト配列に変換する (上記のコードのステップ 3) 次を使用しました - GUID を ByteArray に

    ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
    bb.putLong(namespaceId.getMostSignificantBits());
    bb.putLong(namespaceId.getLeastSignificantBits());
    byte[] namespaceBytes = bb.array()

ハッシュ部分 (ステップ 4) には、apache-commons message-digest クラスを使用します

    final MessageDigest sha = MessageDigest.getInstance("SHA-1");
    final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    outputStream.write(namespaceBytes);
    outputStream.write(nameBytes);
    sha.update(outputStream.toByteArray());
    final byte[] hash = sha.digest();

コードの残りの部分は完全に同じです。

ただし、Java の符号付きバイト配列と .NET の符号なしバイトについて、ここに投稿された他の質問を調べた後。各ポイントで取得した出力をログに記録しましたが、これらの両方のステップで出力に類似性は見られません。

いくつかのスレッドを読んだ後、GUID.toByteArray() メソッドが Java で値を変換する方法とは異なる方法で動作することに気付きました。また、.NET のバイト配列は符号なしであり、Java ではサポートされていないタイプです。Java で動作するようにコードを修正するにはどうすればよいですか?

4

0 に答える 0