英文:
SHA256 hash smillar to .Net hash
问题
以下是Android中的Java代码,用于计算与.NET版本相同的哈希值:
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
public class Main {
public static void main(String[] args) {
String str = "str";
String outHash = "95e5f0b6988ec703e832172f70ce7dc7";
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] challengeBytes = md.digest(str.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : challengeBytes) {
sb.append(String.format("%02X", b));
}
String result = sb.toString();
result = result.substring(0, result.length() - 2); // Remove the trailing "0A"
result = result.replace("+", "-").replace("/", "_");
System.out.println(result);
System.out.println(result.equalsIgnoreCase(outHash));
} catch (Exception e) {
e.printStackTrace();
}
}
}
这段Java代码将计算与.NET版本相同的哈希值。希望这对你有帮助!
英文:
I have am doing an Oauth App, where in few parts the hash is calculated via a .Net application, following is the .Net code to compute the hash
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;
}
}
I want a similar version in android. I have R&D around the web and no solution yet of the same. Following the java code which is producing a different result. The android version string needs to be same as .Net version.
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 code
Please help
答案1
得分: 2
以下是翻译好的部分:
"因为你只需要做一件事情错了,就很难测试,而且哈希值会完全不同,因为它们是这样设计的。直到完全正确之前,你永远无法认为自己“越来越接近”。
确保在字节数组上使用相同的编码,使用相同的哈希算法(这里的.NET示例是SHA-256,而你的Java示例是MD5)"
英文:
It's hard to test because you only need to get one thing wrong, and the hash is completely different because they are designed that way. You never get to think "I'm getting closer" until it's exactly right.
Make sure you use the same encoding on the byteArray, use the same hashing algorithm (the .NET example here is SHA-256 and your Java one is MD5)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论