Tôi đang sử dụng xcode và đây là phương pháp SHA512 tôi:Objective-C SHA2 băm không hoạt động đúng với phi ASCII
-(NSString*) sha512:(NSString*)input
{
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:input.length];
uint8_t digest[CC_SHA512_DIGEST_LENGTH];
CC_SHA512(data.bytes, data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x", digest[i]];
}
return output;
}
Khi tôi cố gắng để vượt qua các đầu vào "test", nó sẽ trả về: "ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff " khớp với các công cụ băm sha512 khác (bao gồm cả chương trình Java của tôi và" http://hash.online-convert.com/sha512-generator ").
Tuy nhiên, khi tôi nhập char không ascii như "é", nó trả về một cái gì đó khác với tất cả các công cụ sha512 khác của tôi. Đối với đầu vào "é", phương pháp của tôi trở lại: "60313f8521d3016916d876f7ad11cf42a30dfd4ff9bc557f1e2f90e0d37c56b76ab5e42c8a16db20c18086b0d769c08542429c262cc21ee4fba02bfc689a4797" khi các công cụ khác (một lần nữa bao gồm cả chương trình Java của tôi và "http://hash.online-convert.com/sha512-generator") return "9e2ad28633f24451bd4f3c1cb20586a21a44c3aeedbdc01b9cc8fa72917ea7bd689c82b8bf1fef89b911cf8cc46fa2c1ccc10087b2094fd4d3350ecd88526a2c".
Tôi có bỏ lỡ bất kỳ điều gì không? Bất kỳ ý tưởng về điều này? Cảm ơn!
Vấn đề là '- [NSString length]' là số ký tự trong chuỗi, không phải số byte cần thiết để biểu diễn các ký tự đó trong một mã hóa cụ thể. "é" là một ký tự, nhưng mã hóa thông tin bao gồm cả dấu e và dấu trọng âm có thể mất nhiều hơn một byte trong một số mã hóa. –
cảm ơn! nó hoạt động! – evanwong