2017-01-13 3 views
3

Ich brauche die folgenden .NET-Code zu .Net-Core zu konvertieren:KeyedHashAlgorithm in .net Kern

static byte[] HmacSHA256(String data, byte[] key) 
{ 
    String algorithm = "HmacSHA256"; 
    KeyedHashAlgorithm kha = KeyedHashAlgorithm.Create(algorithm); 
    kha.Key = key; 

    return kha.ComputeHash(Encoding.UTF8.GetBytes(data)); 
} 

Die obige Snippet verwendet wird für Amazon AWS Keysigning und wird von here genommen.

Ich benutze System.Security.Cryptography.Primitives 4.3.0 und KeyedHashAlgorithm.Create-Methode existiert nicht. Mit Blick auf den github kann ich, dass das Verfahren gibt es jetzt erstellen sehen, aber es wird nicht unterstützt:

public static new KeyedHashAlgorithm Create(string algName) 
     { 
      throw new PlatformNotSupportedException(); 
} 

Die Frage ist, was zu KeyedHashAlgorithm.Create meine Alternative ist (string algName) in .Net-Core?

Antwort

4

Die .Net-Core scheint HMACSHA256 Class zu schaffen, die genau sein sollte, was Sie brauchen:

static byte[] HmacSHA256(String data, byte[] key) 
{ 
    HMACSHA256 hashAlgorithm = new HMACSHA256(key); 

    return hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes(data)); 
} 
+0

Vielen Dank! Ich denke, das würde funktionieren, nur das Wort 'new' fehlt im Code:' new HMACSHA256 (key); ' – Ross

+0

@Ross Right - reparierte es;) – tpeczek

+0

Vergessen Sie nicht, es in einen using-Block zu werfen – ArcadeRenegade

1

FYI, können Sie sich die Mühe der Erzeugung der Schlüsselsignatur manuell, wenn Sie die AWSSDK verwenden speichern.

using Amazon.Runtime.Internal.Auth; 

DateTime now = DateTime.UtcNow; 

string signature = ToHex(AWS4Signer.ComposeSigningKey("yourSecretKey", "us-west-2", now.ToString("yyyyMMdd"), "s3")); 

public static string ToHex(byte[] data) 
{ 
    var sb = new StringBuilder(); 
    for (var i = 0; i < data.Length; i++) 
    { 
     sb.Append(data[i].ToString("x2")); 
    } 
    return sb.ToString(); 
} 
+0

Hier ist wie ich habe unter Verwendung AWS4Signer vorgeschlagen: 'private string _Signature (string stringToSign) { byte [] key = AWS4Signer.ComposeSigningKey (AppSettings.AmazonS3.SecretAccessKey, AppSettings.AmazonS3.Region, Datumsstempel, AppSettings.AmazonS3.Service); zurück (AWS4Signer.ComputeKeyedHash (SigningAlgorithm.HmacSHA256, Schlüssel, stringToSign) .Hex()); } ' – Ross