Tôi cố gắng để viết hàm để tạo chuỗi SHA512 trong khách quan từ chức năng .net đó là.net vs Mục tiêu c SHA-512 không phù hợp
public static string GetSHA512(string strPlain)
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] HashValue = null;
byte[] MessageBytes = UE.GetBytes(strPlain);
System.Security.Cryptography.SHA512Managed SHhash = new System.Security.Cryptography.SHA512Managed();
string strHex = string.Empty;
HashValue = SHhash.ComputeHash(MessageBytes);
foreach (byte b in HashValue)
{
strHex += String.Format("{0:x2}", b);
}
return strHex;
}
này cho kết quả như
input : pass123
output: 2a6353744cc2914c602265f50d2e413d0561368775756392517abb340ef75d52ee0c5d3623ddd1826fd768a13dca8961f5957c75df0d793b9d7537aabe050705
Những gì tôi đã thử như sau
-(NSString *)createSHA512:(NSString *)string
{
const char *cstr = [string cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:string.length];
uint8_t digest[CC_SHA512_DIGEST_LENGTH];
CC_SHA512(data.bytes, data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH];
for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
return output;
}
cho kết quả dưới đây
input : pass123
output: fd37ca5ca8763ae077a5e9740212319591603c42a08a60dcc91d12e7e457b024f6bdfdc10cdc1383e1602ff2092b4bc1bb8cac9306a9965eb352435f5dfe8bb0
Có ai vui lòng đề xuất tôi đang làm gì sai không?
Tại sao hai giá trị này lại khác nhau?
Vui lòng sửa lỗi của tôi.
EDIT
bình Trong khi tôi đã cố gắng thay đổi mã hóa để NSUTF16StringEncoding
và NSUnicodeStringEncoding
mà kết quả vẫn khác nhau và như sau
input : pass123
output: 514331e3f7ca0a295539347ebccc4e4f095fe5f3c1df10d43b4d550144c7b30ba9507831893ea63ea22e62e993be529b0d14be7800a90aa0de199d6be62a5f1b
Cảm ơn bạn đã phản ứng nhanh chóng của bạn nhưng chúng tôi đang ở trong một giai đoạn mà chúng ta không thể thay đổi .net chức năng và cần phải viết chức năng compitable trong mục tiêu c. –
@JanakNirmal Vì vậy, chỉ cần làm: 'const char * cstr = [string cStringUsingEncoding: NSUTF16StringEncoding]; ' – NSAddict
@JanakNirmal: Điều đáng nói là phải bắt đầu. Trong trường hợp đó, bạn cần thay đổi mã Objective C để sử dụng 'NSUTF16StringEncoding'. –