Преобразование из String в двоичный, а затем в формат base64

Попытка создать подпись с помощью RFC 2104-совместимого HMAC с алгоритмом хеширования SHA256. Я на полпути, но застрял в преобразовании строки в двоичный, а затем в формат base64.

Вот инструкция, которой я следую. введите здесь описание изображения

Вот код, который я сделал

let stringToSign = "GET\nwebservices.amazon.com\n/onca/xml\nAWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01"

let beforeCoversion = stringToSign.hmac(algorithm: .SHA256, key: "1234567890")
let binary = beforeCoversion.data(using: .utf8, allowLossyConversion: false)
let afterCoversion = binary?.base64EncodedString(options: [.lineLength64Characters])

print(beforeCoversion)
print(afterCoversion!)

Распечатать

8fb6d93342d767d797799aee4ea5a6d8322f0d8554537c313cfa69fa25f1cd07
OGZiNmQ5MzM0MmQ3NjdkNzk3Nzk5YWVlNGVhNWE2ZDgzMjJmMGQ4NTU0NTM3YzMx
M2NmYTY5ZmEyNWYxY2QwNw==

Я вижу, что получаю 8fb6d93342d767d797799aee4ea5a6d8322f0d8554537c313cfa69fa25f1cd07, поэтому мое преобразование не удалось преобразовать строку в двоичный, а затем в формат base64. Я считаю, что beforeCoversion.data(using: .utf8, allowLossyConversion: false) можно использовать для преобразования строки в двоичный файл, а binary?.base64EncodedString(options: [.lineLength64Characters]) можно использовать для преобразования в формат base64. Это правильно? sЕсть предложения?


person Pak Ho Cheung    schedule 24.10.2017    source источник


Ответы (1)


Простой способ решить эту проблему, если вы используете amazon-api

pod 'AWSAPIGateway'

потом

let dataToSign = stringToSign.data(using: String.Encoding.utf8)
let conversion = AWSSignatureSignerUtility.hmacSign(dataToSign, withKey: "1234567890", usingAlgorithm: UInt32(kCCHmacAlgSHA256))!

Спасибо Roozbeh Zabihollahi за ответ в Подпись Amazon Product Advertising API в iOS

person Pak Ho Cheung    schedule 24.10.2017