【问题标题】:Convert C# HMACSHA256 to Objective-C将 C# HMACSHA256 转换为 Objective-C
【发布时间】:2015-06-26 20:43:04
【问题描述】:

任何人都可以将以下代码转换为 Objective-C 吗?

服务器实现了下面的代码,我必须在客户端做同样的事情。

private string Signature()
        {
            string publicKey    = PUBLICKEY;
            string secretKey    = PRIVATEKEY;
            string email        = YOUREMAIL;

            if (String.IsNullOrWhiteSpace(secretKey) || String.IsNullOrWhiteSpace(publicKey))
                return "";

            string signature;
            var secretBytes = Encoding.UTF8.GetBytes(secretKey);
            var valueBytes = Encoding.UTF8.GetBytes(publicKey);

            using (var hmac = new HMACSHA256(secretBytes))
            {
                var hash = hmac.ComputeHash(valueBytes);
                signature = Convert.ToBase64String(hash);
            }

            string authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(email + ":" + signature));

            return authInfo;
        }

【问题讨论】:

标签: ios objective-c iphone


【解决方案1】:

SO Answer for HmacSHA512 可以很容易地转换为HmacSHA256,只需将所有512的实例更改为256并添加Base64编码:

+ (NSData *)doHmacSha256:(NSData *)dataIn
                     key:(NSData *)key
{
    NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];

    CCHmac( kCCHmacAlgSHA256,
            key.bytes,
            key.length,
            dataIn.bytes,
            dataIn.length,
            macOut.mutableBytes);

    return macOut;
}

测试:

NSData *keyData  = [@"MyTestKey" dataUsingEncoding:NSASCIIStringEncoding];
NSData *data     = [@"Now is the time for all good computers to come to the aid of their masters." dataUsingEncoding:NSASCIIStringEncoding];
NSData *hamcData = [Test doHmacSha256:data key:keyData]; // Where "Test" is the class "doHmacSha256" is defined in.
NSLog(@"hamcData: %@", hamcData);

NSString *base64HmacString = [hamcData base64EncodedStringWithOptions:0];
NSLog(@"base64HmacString: %@", base64HmacString);

输出:

hamcData: <f1279694 14df8ed4 1865b99a 96a524d3 941d3773 35faf0d2 b3e7aaaa 6d135186>
base64HmacString: 8SeWlBTfjtQYZbmalqUk05QdN3M1+vDSs+eqqm0TUYY=

【讨论】:

    猜你喜欢
    • 2011-12-05
    • 2017-10-10
    • 2012-11-15
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    相关资源
    最近更新 更多