programing

목표 C: SHA1

padding 2023. 10. 25. 23:07
반응형

목표 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

반응형