【问题标题】:HmacSHA256 algorithm in Android API 23Android API 23 中的 HmacSHA256 算法
【发布时间】:2017-12-07 01:34:12
【问题描述】:

我正在尝试在我的 Android 应用程序 (API 23) 中生成哈希值。我点击了这个链接-https://developer.android.com/reference/javax/crypto/Mac.html,下面的代码应该可以正常工作。

Mac hmacSha256 = Mac.getInstance("HmacSHA1");

但这会产生编译时错误-

java.security.NoSuchAlgorithmException

我从其他 Stackoverflow 帖子中搜索并尝试了一些解决方案,但没有奏效。

试过了-MessageDigest digest = MessageDigest.getInstance("SHA-256"); 得到了同样的错误。

我的总体意图是将以下 C# 代码转换为 Java,以便我可以在我的 Android 应用程序中使用它-

string GenerateAuthToken(string verb, string resourceType, string resourceId, string date, string key, string keyType, string tokenVersion)
{
    var hmacSha256 = new System.Security.Cryptography.HMACSHA256 { Key = Convert.FromBase64String(key) };

    verb = verb ?? "";
    resourceType = resourceType ?? "";
    resourceId = resourceId ?? "";

    string payLoad = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}\n{1}\n{2}\n{3}\n{4}\n",
            verb.ToLowerInvariant(),
            resourceType.ToLowerInvariant(),
            resourceId,
            date.ToLowerInvariant(),
            ""
    );

    byte[] hashPayLoad = hmacSha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(payLoad));
    string signature = Convert.ToBase64String(hashPayLoad);

    return System.Web.HttpUtility.UrlEncode(String.Format(System.Globalization.CultureInfo.InvariantCulture, "type={0}&ver={1}&sig={2}",
        keyType,
        tokenVersion,
        signature));
}

所以我只是一步一步地手动转换每一行并停留在这一点上。我有什么想法可以完成这项工作吗?

【问题讨论】:

标签: java c# android sha256


【解决方案1】:

您输入的算法不正确 这是 HmacSHA256 不是 hmacSHA256

在选择算法时需要小心,因为它们区分大小写。

从你的快照我可以看出你使用了

Mac hmacSHA256 = Mac.getInstance("hmacSHA256");

这是不正确的,因为您试图获取 hmacSHA256 女巫的实例不存在!

正确的应该是

Mac hmacSHA256 = Mac.getInstance("HmacSHA245");

第一个 H 应该大写

【讨论】:

  • 您附加的快照包含Mac hmacSHA256 = Mac.getInstance("hmacSHA256"); 女巫错了,应该是Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
  • 它们不区分大小写。没有“HmacSHA245”之类的东西。
  • @PedroCavaleiro 我已经尝试了这些可能的组合。
  • @SouvikGhosh 查看此示例,并仔细检查导入 jokecamp.com/blog/…
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2015-11-15
  • 1970-01-01
相关资源
最近更新 更多