android - 在 Android/Java 和 C# 中计算 SHA256 哈希

标签 android asp.net security sha asp.net-web-api

我正在尝试在 android 中生成 SHA256 哈希,然后将其传递给 ASP.NET Web API Web 服务并在那里比较哈希。因此,我需要在 Android 中构造一个哈希,给定 ASP.NET 中的相同输入将生成一个等效的哈希。我正在努力找出自己做错了什么。

这是 Android 代码:

public String computeHash(String input) throws NoSuchAlgorithmException{
    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    digest.reset();
    try{
      digest.update(input.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e){
      e.printStackTrace();
    }
    
    byte[] byteData = digest.digest(input.getBytes());
    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < byteData.length; i++){
      sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
    }
    return sb.toString();
}

这是服务器的 C# 代码:

    private static string ComputeHash(string input, HashAlgorithm algorithm)
    {

        Byte[] inputBytes = Encoding.UTF8.GetBytes(input);
        Byte[] hashedBytes = algorithm.ComputeHash(inputBytes);

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < hashedBytes.Length; i++)
        {
            sb.Append(String.Format("{0:x2}", hashedBytes[i]));
        }

        return sb.ToString();
    }

最佳答案

您的 Java 代码错误:您将输入字节添加了两次。如果您要一次性计算,则需要仅调用 digest(bytes) 或在 update(bytes) 之后调用 digest() ;

关于android - 在 Android/Java 和 C# 中计算 SHA256 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661008/

相关文章:

javascript - Flash安全沙箱: calling a Javascript that makes a call to a different site

android - Android中如何避免图片拉伸(stretch)

Java MIDI 解析器?

c# - PDF 证书过期后的数字签名验证

asp.net - 如果gridview中有超过12列

java - cfhttp : the trustAnchors parameter must be non-empty

android - 创建一个 jar 文件 - Dalvik 错误

java - 将格式化文本附加到 EditText View

javascript - 通过 jQuery 从 ASP.NET 中的 Web 服务获取数据

css - 是否可以通过样式表进行跨域攻击?