Generate SHA256 hash in Objective-C

╄→гoц情女王★ 提交于 2019-12-03 11:51:25

You need to include the appropriate header file:

#include <CommonCrypto/CommonDigest.h>

According to the Cryptographic Services documentation this should be available on both iOS and OS X.

In OS X v10.5 and later and iOS 5.0 and later, Common Crypto provides low-level C support for encryption and decryption. Common Crypto is not as straightforward as Security Transforms, but provides a wider range of features, including additional hashing schemes, cipher modes, and so on.

#import <CommonCrypto/CommonDigest.h>

Objective-C: SHA256 is only two lines:

+ (NSData *)doSha256:(NSData *)dataIn {
    NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];
    CC_SHA256(dataIn.bytes, dataIn.length, macOut.mutableBytes);
    return macOut;
}

Swift 3

func sha256Hex(string: String) -> String? {
    guard let messageData = string.data(using:String.Encoding.utf8) else { return nil }
    var digestData = Data(count: Int(CC_SHA256_DIGEST_LENGTH))

    _ = digestData.withUnsafeMutableBytes {digestBytes in
        messageData.withUnsafeBytes {messageBytes in
            CC_SHA256(messageBytes, CC_LONG(messageData.count), digestBytes)
        }
    }

    return digestData.map { String(format: "%02hhx", $0) }.joined()
}

// Test

let sha256HexString = sha256Hex(string:"Hello")
print("sha256HexString: \(sha256HexString!)")

sha256HexString: "185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969"

Check out the NSHash cocoa pod. It has a bunch of different hashing methods including SHA256.

https://github.com/jerolimov/NSHash

a modified version of @zaph answer in Objective-C with NSString as input and output:

-(NSString*)sha256HashFor:(NSString*)input
{
    NSData* data = [input dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableData *sha256Data = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];
    CC_SHA256([data bytes], (CC_LONG)[data length], [sha256Data mutableBytes]);
    return [sha256Data base64EncodedStringWithOptions:0];
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!