MD5 Hash?

  • Hi List,

    I'm sure this question has come up before, but here goes:

    I'm looking for a way to create an MD5 hash from two strings.  I've
    searched around for stuff, and I've found claims that Cocoa doesn't
    have an MD5 function built in.  I've found people telling me to import
    <openssl/md5.h>, great, but what do I do with it from there?  I'm also
    confused because I found this line on a forum:

      foo = [[[[NSData alloc] initWithContentsOfFile: @"my.data"]
    autorelease] md5];

    Which makes me think that perhaps Cocoa does have some MD5 code
    squirreled away somewhere??

    Help!

    Thanks a bunch!

    Dave DeLong
  • Am 27. Mrz 2005 um 08:52 Uhr schrieb Dave DeLong:

    > I'm looking for a way to create an MD5 hash from two strings.

    #import <Foundation/Foundation.h>

    @interface NSData (AMDigest)

    - (NSData *)md5Digest;

    - (NSData *)sha1Digest;

    @end

    #import "NSData_AMDigest.h"
    #include <openssl/evp.h>
    #include <openssl/err.h>

    @implementation NSData (AMDigest)

    - (NSData *)md5Digest
    {
    // compute an MD5 digest.
    EVP_MD_CTX mdctx;
    unsigned char md_value[EVP_MAX_MD_SIZE];
    int md_len;
    EVP_DigestInit(&mdctx, EVP_md5());
    EVP_DigestUpdate(&mdctx, [self bytes], [self length]);
    EVP_DigestFinal(&mdctx, md_value, &md_len);
    return [NSData dataWithBytes: md_value length: md_len];
    }

    - (NSData *)sha1Digest
    {
    // compute an SHA1 digest.
    EVP_MD_CTX mdctx;
    unsigned char md_value[EVP_MAX_MD_SIZE];
    int md_len;
    EVP_DigestInit(&mdctx, EVP_sha1());
    EVP_DigestUpdate(&mdctx, [self bytes], [self length]);
    EVP_DigestFinal(&mdctx, md_value, &md_len);
    return [NSData dataWithBytes: md_value length: md_len];
    }

    @end

    Andreas