从String转换为二进制,然后转换为base64格式

时间:2017-10-24 16:02:30

标签: swift string type-conversion encode amazon-product-api

尝试使用符合RFC 2104的HMAC和SHA256哈希算法创建签名。我已经完成了一半,但仍坚持将字符串转换为二进制,然后转换为base64格式。

这是我要遵循的指示。 enter image description here

这是我制作的代码

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格式。那是对的吗? sAny建议?

1 个答案:

答案 0 :(得分:0)

如果您使用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 Signature in iOS

中的回答
相关问题