vb.netでハッシュ計算に問題があります。良いハッシュを計算し、JavaでJava SHA256ハッシュはvb.netと同じではありません
の作業コードこのコードの
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class MyClass {
public static void main(String args[]) {
String test = "line1\nline2";
System.out.println(test);
String testOut = getTest(test);
System.out.println(testOut);
}
public static String getTest(String input) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(input.getBytes());
return Base64.getEncoder().encodeToString(md.digest());
}
catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
出力は
line1
line2
aDN24pCCm0gsJlV0XK/6eh3M+hCvqmLawrQt1saND4M=
vb.netで例を動作していないされて
Dim test As String = "line1\nline2"
Console.WriteLine(test)
Dim mySHA256 As SHA256 = SHA256Managed.Create()
mySHA256.ComputeHash(Encoding.UTF8.GetBytes(test))
Dim out = Convert.ToBase64String(mySHA256.Hash)
Console.WriteLine(out)
出力を下回っています以下
line1\nline2
RrUKDuWDeHhbuSYAZlamp7dr3ujXi3v9cm8xvOUtdM0=
だから、 "\ n"はvb.netの文字の新しい行ではないことが分かりました。だから私は、出力が
line1
line2
0UqRptHG7oO/DHdOvsvubYs5OzldrinuqDnDVNb7qcA=
を下回っているvbNewLine
Dim test2 As String = "line1" + vbNewLine + "line2"
Console.WriteLine(test2)
Dim mySHA256_2 As SHA256 = SHA256Managed.Create()
mySHA256_2.ComputeHash(Encoding.UTF8.GetBytes(test2))
Dim out2 = Convert.ToBase64String(mySHA256_2.Hash)
Console.WriteLine(out2)
使用私の代わりにComputeHash
Dim test3 As String = "line1" + vbNewLine + "line2"
Console.WriteLine(test3)
Dim mySHA256_3 As SHA256 = SHA256Managed.Create()
mySHA256_3.TransformFinalBlock(Encoding.UTF8.GetBytes(test3), 0, Encoding.UTF8.GetBytes(test3).Length)
Dim out3 = Convert.ToBase64String(mySHA256_3.Hash)
Console.WriteLine(out3)
のTransformFinalBlock
を使用しようと、出力は前の
line1
line2
0UqRptHG7oO/DHdOvsvubYs5OzldrinuqDnDVNb7qcA=
01と同じです
私は、Javaの改行"\n"
が間違ったハッシュを計算するため、問題を引き起こしていると思われます。 "\n"
のない文字列がある場合、値は同じです。 vb.netではvbNewLine
の代わりにEnvironment.NewLine
を使用しようとしました。
VBの '\ n'に相当するのは' vbLF'です。 'Environment.NewLine'と' vbNewLine'はプラットフォームに依存しますが、ウィンドウ内では 'vbCR&vbLF'と同等です。 –
あなたは私の日を救った。迅速な対応に感謝します。私は新しい行のために私のハッシュ値が同じではないことを理解するために何日も立ち往生した。あなたは私がそれを受け入れることができるようにあなたのコメントを回答として投稿することができます。 – KuKeC