So I tried to convert a piece of C# code to Java but I do not get same output when I use the converted code.
I already searched google and couldn't really find an answer. I' mostly interested in the Java equivalent of the TransformBlock method as I think that it is the one which causes problems.
C# code:
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 code:
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();
}
}