iOS에서 SHA-2 (이상적으로 SHA 256 또는 SHA 512) 해시를 계산하려면 어떻게해야합니까?
보안 서비스 API를 사용하면 해시를 직접 계산할 수 없습니다. 많은 퍼블릭 도메인과 자유 라이선스 버전이 있지만 가능하면 시스템 라이브러리 구현을 사용하고 싶습니다.
데이터는 NSData 또는 일반 포인터를 통해 액세스 할 수 있습니다.
해시의 암호화 강도는 나에게 중요합니다. SHA-256은 허용되는 최소 해시 크기입니다.
이것이 내가 SHA1에 사용하는 것입니다.
#import <CommonCrypto/CommonDigest.h>
+ (NSData *)sha1:(NSData *)data {
unsigned char hash[CC_SHA1_DIGEST_LENGTH];
if ( CC_SHA1([data bytes], [data length], hash) ) {
NSData *sha1 = [NSData dataWithBytes:hash length:CC_SHA1_DIGEST_LENGTH];
return sha1;
}
return nil;
}
교체 CC_SHA1
와 함께 CC_SHA256
(또는 중 당신이 필요로하는)뿐만 아니라, CC_SHA1_DIGEST_LENGTH
와 CC_SHA256_DIGEST_LENGTH
.
다음은 NSString을 기반으로 한 매우 유사한 것입니다.
+ (NSString *)hashed_string:(NSString *)input
{
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:input.length];
uint8_t digest[CC_SHA256_DIGEST_LENGTH];
// This is an iOS5-specific method.
// It takes in the data, how much data, and then output format, which in this case is an int array.
CC_SHA256(data.bytes, data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
// Parse through the CC_SHA256 results (stored inside of digest[]).
for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x", digest[i]];
}
return output;
}
(크레딧은 http://www.raywenderlich.com/6475/basic-security-in-ios-5-tutorial-part-1 로 이동 )
이것이 나를 위해 일한 것입니다.
func sha256(securityString : String) -> String {
let data = securityString.dataUsingEncoding(NSUTF8StringEncoding)!
var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
let output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH))
for byte in hash {
output.appendFormat("%02x", byte)
}
return output as String
}
Below link i used for creating document hash value and Its very simple and easy to calculate hash value specially for large files.
+ (NSData *)sha256DataFromData:(NSData *)data {
unsigned char result[CC_SHA256_DIGEST_LENGTH];
CC_SHA256([data bytes], (int)[data length], result);
return [NSData dataWithBytes:result length:CC_SHA256_DIGEST_LENGTH];
}
I cleaned up https://stackoverflow.com/a/13199111/1254812 a bit and structured it as an NSString
extension
@interface NSString (SHA2HEX)
/*
Get the SHA2 (256 bit) digest as a hex string.
*/
@property (nonatomic, readonly) NSString* sha2hex;
@end
@implementation NSString (SHA2HEX)
- (NSString*)sha2hex
{
NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
if (data.length > UINT32_MAX)
return nil;
uint8_t digest[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(data.bytes, (CC_LONG)data.length, digest);
const int hexlen = CC_SHA256_DIGEST_LENGTH * 2;
NSMutableString *hexstr = [NSMutableString stringWithCapacity:hexlen];
for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
[hexstr appendFormat:@"%02x", digest[i]];
}
return hexstr;
}
@end
ReferenceURL : https://stackoverflow.com/questions/6228092/how-can-i-compute-a-sha-2-ideally-sha-256-or-sha-512-hash-in-ios
'Development Tip' 카테고리의 다른 글
문자열을 모든 유형으로 변환하는 방법 (0) | 2020.12.15 |
---|---|
Visual Studio 2010은 예상대로 종속성 인 프로젝트에서 정적 라이브러리를 자동 연결하지 않습니다. (0) | 2020.12.15 |
한 서비스의 로그를 별도의 파일에 작성하는 방법은 무엇입니까? (0) | 2020.12.15 |
Jenkins 자동 배포 Tomcat 7 (0) | 2020.12.15 |
JavaFX FileChooser (0) | 2020.12.15 |