当前位置:  开发笔记 > 编程语言 > 正文

在可可中的字符串上使用MD5哈希?

如何解决《在可可中的字符串上使用MD5哈希?》经验,为你挑选了6个好方法。

在Facebook Connect源代码中注意到这一点.看起来很稳固,试一试.

#import 

...

+ (NSString*)md5HexDigest:(NSString*)input {
    const char* str = [input UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(str, strlen(str), result);

    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
    for(int i = 0; i

+1这基本上等同于我上面的代码片段,但看起来更清晰. (9认同)

@bentford:更清洁的解决方案更好. (3认同)


Chad Birch.. 36

好吧,首先,MD5不加密.因此,如果您正在寻找加密,那么您正在寻找错误的地方.

但是,如果您只是想在iPhone上使用MD5哈希,这应该会为您提供所需的信息:

#import 

NSString *md5(NSString *str) {
    const char *cStr = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5( cStr, strlen(cStr), result );
    return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
        result[0], result[1],
        result[2], result[3],
        result[4], result[5],
        result[6], result[7],
        result[8], result[9],
        result[10], result[11],
        result[12], result[13],
        result[14], result[15]
    ];
}

//…

NSString *digest = md5(@"test");
NSLog(@"MD5 TEST %@", digest);

(来自iPhone上的计算MD5)



1> 小智..:

在Facebook Connect源代码中注意到这一点.看起来很稳固,试一试.

#import 

...

+ (NSString*)md5HexDigest:(NSString*)input {
    const char* str = [input UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(str, strlen(str), result);

    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
    for(int i = 0; i


+1这基本上等同于我上面的代码片段,但看起来更清晰.
@bentford:更清洁的解决方案更好.

2> Chad Birch..:

好吧,首先,MD5不加密.因此,如果您正在寻找加密,那么您正在寻找错误的地方.

但是,如果您只是想在iPhone上使用MD5哈希,这应该会为您提供所需的信息:

#import 

NSString *md5(NSString *str) {
    const char *cStr = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5( cStr, strlen(cStr), result );
    return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
        result[0], result[1],
        result[2], result[3],
        result[4], result[5],
        result[6], result[7],
        result[8], result[9],
        result[10], result[11],
        result[12], result[13],
        result[14], result[15]
    ];
}

//…

NSString *digest = md5(@"test");
NSLog(@"MD5 TEST %@", digest);

(来自iPhone上的计算MD5)


正确,但-1.我使用stackoverflow来避免其他论坛网站.请考虑发布实际答案而不是链接.

3> bentford..:

这就是我使用的.积分归Alistair McMillan所有.

#import 


+ (NSString *) md5:(NSString *)str {
 const char *cStr = [str UTF8String];
 unsigned char result[16];
 CC_MD5( cStr, strlen(cStr), result );
 return [NSString stringWithFormat:
  @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  result[0], result[1], result[2], result[3], 
  result[4], result[5], result[6], result[7],
  result[8], result[9], result[10], result[11],
  result[12], result[13], result[14], result[15]
  ]; 
}

注意#1:我没有链接到任何库

注意#2:我在iphone的外部框架列表中找不到-lcrypto,这没有-lcrypto



4> 小智..:

值得一提的是,在最新版本的OS X上不推荐使用OpenSSL方法,而MD5摘要通常是小写的.就个人而言,我更喜欢展开的效率风格,我认为使用ObjC类别更适合.

对于MD5Digest.h:#include

@interface NSString (MD5Digest)
- (NSString*) md5Digest;
@end

@interface NSData (MD5Digest)
- (NSString*) md5Digest;
@end

和MD5Digest.m:

#include 
#include "MD5Digest.h"

static NSString* md5Digest(const void *data, CC_LONG length)
{
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    unsigned char* d = CC_MD5(data, length, digest);

    return [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
        d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15],
        nil];
}

@implementation NSString (MD5Digest)

- (NSString*) md5Digest
{
    return md5Digest([self UTF8String], [self lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
}

@end

@implementation NSData (MD5Digest)

- (NSString*) md5Digest
{
    return md5Digest([self bytes], [self length]);
}

@end



5> MarcWan..:

我在"NSString + MyGoonk"类别中添加了以下内容:

#include 

- (NSString *)md5
{
    NSData *data = [self dataUsingEncoding: NSUTF8StringEncoding];
    unsigned char *digest = MD5([data bytes], [data length], NULL);
    return [NSString stringWithUTF8String: (char *)digest];
}

两件事情:

    假设您的字符串是UTF8.我确信有一种方法可以使它更通用,但我几乎从不使用任何其他东西.

    你必须将-lcrypto链接到你的项目中.



6> 小智..:

在花了太多时间试图解决这个问题之后,我发了一篇包含正确代码以及如何使用它的综合帖子.你可以在我的博客上找到这里的帖子.http://www.saobart.com/md5-has-in-objective-c/

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有