gpt4 book ai didi

java - 将 C# 代码转换为 Java

转载 作者:行者123 更新时间:2023-11-30 06:05:39 24 4
gpt4 key购买 nike

因此,我尝试将一段 C# 代码转换为 Java,但是当我使用转换后的代码时,我没有得到相同的输出。

我已经在谷歌上搜索过,但找不到答案。我最感兴趣的是 TransformBlock 方法的 Java 等效项,因为我认为它是导致问题的方法。

C# 代码:

public class Sha256
{
public Sha256()
{
sha = new SHA256Managed();
sha.Initialize();
}

public void Process(byte[] data, int length)
{
sha.TransformBlock(data, 0, length, data, 0);
}

public void Process(uint data)
{
var bytes = BitConverter.GetBytes(data);

sha.TransformBlock(bytes, 0, 4, bytes, 0);
}

public void Process(string data)
{
var bytes = Encoding.UTF8.GetBytes(data);

sha.TransformBlock(bytes, 0, bytes.Length, bytes, 0);
}

public void Finish(byte[] data)
{
sha.TransformFinalBlock(data, 0, data.Length);

Digest = sha.Hash;
}

public void Finish(byte[] data, int offset, int length)
{
sha.TransformFinalBlock(data, offset, length);

Digest = sha.Hash;
}

SHA256 sha;
public byte[] Digest { get; private set; }
}

Java代码:

public class Sha256 {

public byte[] digest;
private MessageDigest sha;

public Sha256() {
try {
sha = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException ex) {
Logger.logException(ex);
}
}

public void process(byte[] data, int length) {
sha.update(data, 0, length);
}

public void process(int data) {
byte[] bytes = ByteBuffer.allocate(Integer.BYTES).putInt(data).array();

sha.update(bytes, 0, 4);
}

public void process(String data) {
byte[] bytes = data.getBytes(StandardCharsets.UTF_8);

sha.update(bytes, 0, bytes.length);
}

public void finish(byte[] data) {
sha.update(data, 0, data.length);

digest = sha.digest();
}

public void finish(byte[] data, int offset, int length) {
sha.update(data, offset, length);

digest = sha.digest();
}

}

最佳答案

据我所知,C# 默认是小端字节序。这很可能是因为它是由 Microsoft 开发的,而 Microsoft 又使用 x86/x64 机器,其中默认为小端。

Java的ByteBuffer默认使用big endian。它首先是在大端 SPARC 处理器上开发的。有几种方法可以交换字节的顺序,但最自然的方法是使用 ByteBuffer.order() ,如下所示。

public void process(int data) {
byte[] bytes = ByteBuffer.allocate(Integer.BYTES)
.order(ByteOrder.LITTLE_ENDIAN)
.putInt(data)
.array();

sha.update(bytes, 0, bytes.length);
}

关于java - 将 C# 代码转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51400482/

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