So I need to generate a Sha256 password in Objective-C, and can't figure out for the life of me how to do it! Is there something easy I'm just missing?
所以我需要在Objective-C中生成一个Sha256密码,并且无法弄清楚我的生活怎么做!有什么容易的,我只是缺少?
I've tried implementing the following method (which was written for iPhone, but I figured maybe it'd work cross-platform, as some Objective-C code does)
我已经尝试实现以下方法(这是为iPhone编写的,但我想也许它可以跨平台工作,就像一些Objective-C代码那样)
-(NSString*)sha256HashFor:(NSString*)input
{
const char* str = [input UTF8String];
unsigned char result[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(str, strlen(str), result);
NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++)
{
[ret appendFormat:@"%02x",result[i]];
}
return ret;
}
But that just spat out errors about CC_SHA256_DIGEST_LENGTH being an undeclared identifier.
但这只是吐出有关CC_SHA256_DIGEST_LENGTH是未声明标识符的错误。
3 个解决方案
#1
17
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.
根据Cryptographic Services文档,这应该可以在iOS和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.
在OS X v10.5及更高版本以及iOS 5.0及更高版本中,Common Crypto为加密和解密提供低级C支持。 Common Crypto并不像Security Transforms那样简单,但提供了更广泛的功能,包括其他散列方案,密码模式等。
#2
7
#import <CommonCrypto/CommonDigest.h>
Objective-C: SHA256 is only two lines:
Objective-C:SHA256只有两行:
+ (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"
#3
0
Check out the NSHash cocoa pod. It has a bunch of different hashing methods including SHA256.
看看NSHash可可豆荚。它有许多不同的散列方法,包括SHA256。
#1
17
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.
根据Cryptographic Services文档,这应该可以在iOS和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.
在OS X v10.5及更高版本以及iOS 5.0及更高版本中,Common Crypto为加密和解密提供低级C支持。 Common Crypto并不像Security Transforms那样简单,但提供了更广泛的功能,包括其他散列方案,密码模式等。
#2
7
#import <CommonCrypto/CommonDigest.h>
Objective-C: SHA256 is only two lines:
Objective-C:SHA256只有两行:
+ (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"
#3
0
Check out the NSHash cocoa pod. It has a bunch of different hashing methods including SHA256.
看看NSHash可可豆荚。它有许多不同的散列方法,包括SHA256。