首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HMACSHA256 MacAlgorithmProvider vs.NET 4.5 HMACSHA256使用率

HMACSHA256 MacAlgorithmProvider vs.NET 4.5 HMACSHA256使用率
EN

Stack Overflow用户
提问于 2016-01-25 21:29:31
回答 1查看 329关注 0票数 0

除了下面的CreateAuthenticationHeader函数之外,其他相同的代码。在.Net 4.5 MVC5中,我可以使用REST访问(REST,没有存储库)一张蔚蓝的表,而无需使用以下内容:

代码语言:javascript
复制
        private static string CreateAuthorizationHeader(string canonicalizedString)
    {
        var sharedKeyParts = SvcComsCommon.AzureStorageConnectStringDict();

        var signature = string.Empty;
        using (HMACSHA256 hmacSha256 = new HMACSHA256(Convert.FromBase64String(sharedKeyParts["AccountKey"])))
        {
            var dataToHmac = System.Text.Encoding.UTF8.GetBytes(canonicalizedString);
            signature = Convert.ToBase64String(hmacSha256.ComputeHash(dataToHmac));
        }

        var account = sharedKeyParts["AccountName"];
        var authorizationHeader = string.Format(
               CultureInfo.InvariantCulture,
               "{0} {1}:{2}",
               "SharedKey", 
               account,
               signature);
        return authorizationHeader;
    }

在Windows物联网-核心(UWP)最新从2015年10月,我使用以下(因为上面不支持),这给我一个403错误,并抱怨我的签名是错误的。其余的代码是相同的。我错过了什么细微之处?

代码语言:javascript
复制
        private static string CreateAuthorizationHeader(string canonicalizedString)
    {
        var sharedKeyParts = SvcComsCommon.AzureStorageConnectStringDict(); // Just the Azure Storage Connection String as Dictionary. No tricks.

        var key = CryptographicBuffer.ConvertStringToBinary(sharedKeyParts["AccountKey"], BinaryStringEncoding.Utf8);
        var msg = CryptographicBuffer.ConvertStringToBinary(canonicalizedString, BinaryStringEncoding.Utf8);

        // Create HMAC.
        var objMacProv = MacAlgorithmProvider.OpenAlgorithm(MacAlgorithmNames.HmacSha256);
        var hash = objMacProv.CreateHash(key);
        hash.Append(msg);
        var signature = CryptographicBuffer.EncodeToBase64String(hash.GetValueAndReset());

        // Header
        var account = sharedKeyParts["AccountName"];
        var authorizationHeader = string.Format(
               CultureInfo.InvariantCulture,
               "{0} {1}:{2}",
               "SharedKey", 
               account,
               signature);

        return authorizationHeader;
    }

我已经看过其他的帖子了,还没看到缺了什么。

更新物联网核心RPi ARM上的错误消息

代码语言:javascript
复制
The operation identifier is not valid.
  at SharedLibrary!<BaseAddress>+0x8d1eb9
   at SharedLibrary!<BaseAddress>+0xd0e30b
   at SharedLibrary!<BaseAddress>+0xd0e7af
   at SharedLibrary!<BaseAddress>+0xd0e715
   at SharedLibrary!<BaseAddress>+0xd0e69f
   at RpiHeadlessCS.Devices.HxaRs485Ftdi.<ReadAsync>d__26.MoveNext()
Exception thrown: 'System.Exception' in RpiHeadlessCS-uwp.Interop.dll
Read async error: The operation identifier is not valid.
EN

回答 1

Stack Overflow用户

发布于 2016-01-25 22:27:38

UWP在框架中存在一个与缓存行为有关的错误,这会导致Azure存储的Auth错误。他们正在进行修复,但我不能100%确定什么时候会部署该修复程序。真对不起!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35002762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档