gpt4 book ai didi

objective-c - 如何在 Cocoa 中创建字符串的 MD5 哈希?

转载 作者:IT老高 更新时间:2023-10-28 11:43:16 25 4
gpt4 key购买 nike

我知道首选 SHA-1,但这个项目需要我使用 MD5。

#include <openssl/md5.h>

- (NSString*) MD5Hasher: (NSString*) query {
NSData* hashed = [query dataUsingEncoding:NSUTF8StringEncoding];
unsigned char *digest = MD5([hashed bytes], [hashed length], NULL);
NSString *final = [NSString stringWithUTF8String: (char *)digest];
return final;
}

我从 StackOverflow 上另一个类似问题的答案中获得了这段代码,但是当程序在 return final;

处中断时,我从 GDB 收到以下错误
(gdb) p digest
$1 = (unsigned char *) 0xa06310e4 "\0206b\260/\336\316^\021\b\a/9\310\225\204"
(gdb) po final
Cannot access memory at address 0x0
(gdb) po digest

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0xb0623630
0x98531ed7 in objc_msgSend ()
The program being debugged was signaled while in a function called from GDB.
GDB has restored the context to what it was before the call.
To change this behavior use "set unwindonsignal off"
Evaluation of the expression containing the function
(_NSPrintForDebugger) will be abandoned.

我无法理解它。

最佳答案

这是我使用的类别:

NSString+MD5.h

@interface NSString (MD5)

- (NSString *)MD5String;

@end

NSString+MD5.m

#import <CommonCrypto/CommonDigest.h>

@implementation NSString (MD5)

- (NSString *)MD5String {
const char *cStr = [self UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, (CC_LONG)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]
];
}

@end

用法

NSString *myString = @"test";
NSString *md5 = [myString MD5String]; // returns NSString of the MD5 of test

关于objective-c - 如何在 Cocoa 中创建字符串的 MD5 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2018550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com