2015-01-29 2 views
0

Я столкнулся с примером .NET о том, как получить подпись, необходимую для подписания aws-запросов api-вызовов.AWS-подпись для подписанного URL-адреса

Я работаю на приложение Windows Phone 8 и застрял с линией

KeyedHashAlgorithm kha = KeyedHashAlgorithm.Create(algorithm); 

Оказывается, что Windows Phone 8 не имеет метод Create, ошибка ниже:

«System.Security.Cryptography.KeyedHashAlgorithm» не содержит определения для создания

есть ли альтернатива уа y вокруг этого?

Вот полный фрагмент кода

public 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)); 
} 



static byte[] getSignatureKey(String key, String dateStamp, String  regionName, String serviceName) 
    { 
     byte[] kSecret = Encoding.UTF8.GetBytes(("AWS4" + key).ToCharArray()); 
     byte[] kDate = HmacSHA256(dateStamp, kSecret); 
     byte[] kRegion = HmacSHA256(regionName, kDate); 
     byte[] kService = HmacSHA256(serviceName, kRegion); 
     byte[] kSigning = HmacSHA256("aws4_request", kService); 

     return kSigning; 
    } 

ответ

1

Вам не нужно вызвать Create создать экземпляр алгоритма, вы можете просто позвонить new в construct конкретный класс, например new HMACSHA256().

Create - это заводской метод, который позволяет указать алгоритм для использования в конфигурации. В настольных компьютерах и серверах может быть несколько реализаций одного и того же алгоритма (собственный, аппаратный ускоренный и т. Д.), Или вы можете дать пользователям возможность выбрать алгоритм, который они хотят.

Это только одна из вещей, которые были обрезаны из .NET, чтобы уменьшить размер времени выполнения для телефонов и Silverlight.

+0

Спасибо. Это очень полезно. – jade

Смежные вопросы