tôi có chức năng Objective-C sau:Đang cố gắng để Viết NSString chức năng sha1, nhưng nó trở vô
+(NSString *)stringToSha1:(NSString *)str{
NSMutableData *dataToHash = [[NSMutableData alloc] init];
[dataToHash appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
unsigned char hashBytes[CC_SHA1_DIGEST_LENGTH];
CC_SHA1([dataToHash bytes], [dataToHash length], hashBytes);
NSData *encodedData = [NSData dataWithBytes:hashBytes length:CC_SHA1_DIGEST_LENGTH];
[dataToHash release];
NSString *encodedStr = [NSString stringWithUTF8String:[encodedData bytes]];
//NSString *encodedStr = [[NSString alloc] initWithBytes:[encodedData bytes]
// length:[encodedData length] encoding: NSUTF8StringEncoding];
NSLog(@"String is %@", encodedStr);
return encodedStr;
}
Những gì tôi đang cố gắng làm là lấy một NSString và SHA1 mã hóa nó. Phần đó dường như đang làm việc, tôi nghĩ rằng nơi tôi đang rơi xuống là làm thế nào để chuyển đổi các đối tượng NSData trở lại một chuỗi dễ đọc. Nếu tôi sử dụng mã hóa UTF8, tôi sẽ bị trống, nếu tôi nói ASCII, tôi có các ký tự lạ. Những gì tôi thực sự muốn là chuỗi hex, nhưng tôi không có ý tưởng làm thế nào để có được nó. Điều này đang sử dụng iPhone 3.0 SDK.
Hiện tại bất kỳ chuỗi ký tự nào mà tôi vượt qua đều trả về NULL.
Vấn đề riêng biệt: điều này được triển khai tốt hơn dưới dạng danh mục trên NSString thay vì phương pháp lớp học. Phương thức sẽ là - (NSString *) sha1String. Nếu bạn tìm thấy bạn muốn giữ cho nó một phương thức lớp, nó sẽ có một tên như + (NSString *) sha1StringForString: (NSString *) chuỗi. Sự nhầm lẫn giữa một "sha1" (mà là một đại diện nhị phân), và một sha1String là chính xác lý do tại sao bạn gặp rắc rối ở nơi đầu tiên. Việc đặt tên thích hợp sẽ giúp ngăn ngừa sự nhầm lẫn sau này cùng loại. –