2015-12-15 14 views
5

Rodzina SHA256_XXX zadeklarowana w /usr/include/openssl/sha.h została uznana za przestarzałą w systemie OS-X 10.7 i nowszych.Alternatywa dla obliczania sha256 na użycie przestarzałego kodu openssl

int SHA256_Init(SHA256_CTX *c) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER; 
int SHA256_Update(SHA256_CTX *c, const void *data, size_t len) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER; 
int SHA256_Final(unsigned char *md, SHA256_CTX *c) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER; 
unsigned char *SHA256(const unsigned char *d, size_t n,unsigned char *md) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER; 
void SHA256_Transform(SHA256_CTX *c, const unsigned char *data) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER; 

Mimo że obecnie działa, zastanawiam się, jaka jest alternatywa dla późniejszych wersji OS X.

+0

jedna możliwość: w moich własnych projektach buduję i dostarczam własną bibliotekę OpenSSL lub framework wbudowany w aplikację ... –

+0

@MichaelDautermann, co masz na myśli, kompilujesz openssl na własną rękę (bez deklaracje deprecjacji) i używać go zamiast tego? – Zohar81

+0

Tak, [tworzę własne wersje OpenSSL] (http://stackoverflow.com/questions/25530429/build-multiarch-openssl-on-os-x), a następnie łączę się z tym zamiast wersji wbudowanej w SDK że Apple woli, żebyśmy tego nie używali. –

Odpowiedz

2

wspólne Crypto obsługuje SHA256 i innych metod kryptograficznych, i jest dostępny dla OS X i iOS. Dodaj Security.framework i dołącz <CommonCrypto/CommonDigest.h>. Common Crypto to API "C".

+0

możesz mi adres, który nagłówek szukać wewnątrz security.framework do obliczenia sha256? – Zohar81

+0

Ups, był w odpowiedzi, ale nie został poprawnie zacytowany, więc nie wyświetlił się. Naprawiony. W szczególności jest w ''. – zaph

3

Obecnie zatwierdzoną techniką dla wszystkich trawień jest EVP.

https://www.openssl.org/docs/manmaster/crypto/EVP_DigestInit.html#EXAMPLE

Przykładowa funkcja SHA256 (od https://wiki.openssl.org/index.php/EVP_Message_Digests)

void digest_message(unsigned char *message, unsigned char **digest, unsigned int *digest_len) 
{ 
    EVP_MD_CTX *mdctx; 

    if((mdctx = EVP_MD_CTX_create()) == NULL) 
     handleErrors(); 

    if(1 != EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL)) 
     handleErrors(); 

    if(1 != EVP_DigestUpdate(mdctx, message, strlen(message))) 
     handleErrors(); 

    if((*digest = (unsigned char *)OPENSSL_malloc(EVP_MD_size(EVP_sha256()))) == NULL) 
     handleErrors(); 

    if(1 != EVP_DigestFinal_ex(mdctx, *digest, digest_len)) 
     handleErrors(); 

    EVP_MD_CTX_destroy(mdctx); 
} 
Powiązane problemy