Java SHA256散列到.Net散列
我正在做一个Oauth应用程序,其中有几个部分是通过.Net应用程序计算哈希值的,下面是计算哈希值的.Net代码Java SHA256散列到.Net散列,java,android,.net,sha256,message-digest,Java,Android,.net,Sha256,Message Digest,我正在做一个Oauth应用程序,其中有几个部分是通过.Net应用程序计算哈希值的,下面是计算哈希值的.Net代码 public static string GetBase64CodeChallange(string str) { using (SHA256 sha256Hash = SHA256.Create()) { byte[] challengeBytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(str
public static string GetBase64CodeChallange(string str)
{
using (SHA256 sha256Hash = SHA256.Create())
{
byte[] challengeBytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(str));
string s = Convert.ToBase64String(challengeBytes);
s = s.Split('=')[0];
s = s.Replace('+', '-');
s = s.Replace('/', '_');
return s;
}
}
我想要一个类似的android版本。我在网络上进行了研发,但还没有相同的解决方案。遵循产生不同结果的java代码。android版本字符串需要与.Net版本相同
String str1 = "str";
String outHash = "95e5f0b6988ec703e832172f70ce7dc7";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(str1.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte b : array) {
sb.append(String.format("%02X", b));
}
System.out.println(sb.toString());
System.out.println(sb.toString().equalsIgnoreCase(outHash));
} catch (Exception e) {
e.printStackTrace();
}
Android-Java代码
请帮助这很难测试,因为您只需要弄错一件事,而散列是完全不同的,因为它们是这样设计的。你永远不会认为我离你越来越近了,直到它完全正确
请确保您在byteArray上使用相同的编码,使用相同的哈希算法。这里的.NET示例是SHA-256,Java示例是MD5如果您只想在android上使用base64url而不使用字节数组填充,请检查下面的两个小提琴