목표 C: SHA1
목표 c에서 문자열 또는 숫자 집합을 어떻게 공유합니까?
CommonCrypto(애플 프레임워크)에는 SHA-1 해시를 계산하는 기능이 있으며, 여기에는 한 단계 해시가 포함됩니다.
#include <CommonCrypto/CommonDigest.h>
unsigned char digest[CC_SHA1_DIGEST_LENGTH];
NSData *stringBytes = [someString dataUsingEncoding: NSUTF8StringEncoding]; /* or some other encoding */
if (CC_SHA1([stringBytes bytes], [stringBytes length], digest)) {
/* SHA-1 hash has been calculated and stored in 'digest'. */
...
}
숫자 집합의 경우 알려진 길이의 int 배열을 의미한다고 가정합니다.이러한 데이터의 경우 원샷 기능을 사용하는 것보다 다이제스트를 반복적으로 구성하는 것이 더 쉽습니다.
unsigned char digest[CC_SHA1_DIGEST_LENGTH];
uint32_t *someIntegers = ...;
size_t numIntegers = ...;
CC_SHA1_CTX ctx;
CC_SHA1_Init(&ctx);
{
for (size_t i = 0; i < numIntegers; i++)
CC_SHA1_Update(&ctx, someIntegers + i, sizeof(uint32_t));
}
CC_SHA1_Final(digest, &ctx);
/* SHA-1 hash has been calculated and stored in 'digest'. */
...
이는 엔디안니스를 고려하지 않은 것임에 유의하십시오.파워에 이 코드를 사용하여 계산된 SHA-1PC 시스템은 i386 또는 ARM 시스템에서 계산된 것과 다릅니다.계산을 수행하기 전에 정수의 바이트를 알려진 엔디안으로 스왑하는 방법은 간단합니다.
for (size_t i = 0; i < numIntegers; i++) {
uint32_t swapped = CFSwapInt32HostToLittle(someIntegers[i]); /* or HostToBig */
CC_SHA1_Update(&ctx, &swapped, sizeof(swapped));
}
메시지 다이제스트 라이브러리가 있는 또 다른 솔루션(nv-ios-digest):
(1) 끈
// Create an SHA1 instance, update it with a string and do final.
SHA1 sha1 = [SHA1 sha1WithString:@"Hello"];
// Get the pointer of the internal buffer that holds the message digest value.
// The life of the internal buffer ends when the SHA1 instance is discarded.
// Copy the buffer as necessary. The size of the buffer can be obtained by
// 'bufferSize' method.
unsigned char *digestAsBytes = [sha1 buffer];
// Get the string expression of the message digest value.
NSString *digestAsString = [sha1 description];
(2) 수
// Create an SHA1 instance.
SHA1 sha1 = [[SHA1 alloc] init];
// Update the SHA1 instance with numbers.
// (Sorry, the current implementation is endianness-dependent.)
[sha1 updateWithShort:(short)1];
[sha1 updateWithInt:(int)2];
[sha1 updateWithLong:(long)3];
[sha1 updateWithLongLong:(long long)4];
[sha1 updateWithFloat:(float)5];
[sha1 updateWithDouble:(double)6];
// Do final. 'final' method returns the pointer of the internal buffer
// that holds the message digest value. 'buffer' method returns the same.
// The life of the internal buffer ends when the SHA1 instance is discarded.
// Copy the buffer as necessary. The size of the buffer can be obtained by
// 'bufferSize' method.
unsigned char *digestAsBytes = [sha1 final];
// Get the string expression of the message digest value.
NSString *digestAsString = [sha1 description];
메시지 다이제스트 라이브러리는 MD5, SHA-1, SHA-224, SHA-256, SHA-384 및 SHA-512를 지원합니다.
[블로그] 전용 클래스가 있는 iOS의 메시지 요약(MD5, SHA1 등)
http://darutk-oboegaki.blogspot.jp/2013/04/message-digests-md5-sha1-etc-on-ios.html
[라이브러리]nv-ios-digest
https://github.com/TakahikoKawasaki/nv-ios-digest
SHA1은 실제로 Objective-C와 함께 제공되지 않습니다.C 소스 코드를 사용할 수 있습니다.hashdeep
퍼블릭 도메인으로 라이센스가 부여된 친구들(미국 정부의 직원이 작성했기 때문에): http://md5deep.sourceforge.net/ .
언급URL : https://stackoverflow.com/questions/3468268/objective-c-sha1
'programing' 카테고리의 다른 글
경로를 구성하지 않고 angularjs 단일 페이지 응용 프로그램에서 페이지 새로 고침을 탐지하려면 어떻게 해야 합니까? (0) | 2023.10.25 |
---|---|
매크로 "Higher Order Function" 생성기를 사용한 C의 기능 프로그래밍 (0) | 2023.10.25 |
파이썬 애플리케이션을 정적 바이너리로 컴파일하는 방법이 있습니까? (0) | 2023.10.25 |
동적으로 로드된 스크립트를 기다리는 중 (0) | 2023.10.25 |
nodejs 로그 파일은 어디에 있습니까? (0) | 2023.10.25 |