我想寫功能從.NET函數的目標是創建SHA512串.NET VS目標C SHA-512不匹配
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;
}
這讓結果作爲
input : pass123
output: 2a6353744cc2914c602265f50d2e413d0561368775756392517abb340ef75d52ee0c5d3623ddd1826fd768a13dca8961f5957c75df0d793b9d7537aabe050705
我嘗試是遵循
-(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;
}
這給下面
結果input : pass123
output: fd37ca5ca8763ae077a5e9740212319591603c42a08a60dcc91d12e7e457b024f6bdfdc10cdc1383e1602ff2092b4bc1bb8cac9306a9965eb352435f5dfe8bb0
任何人都可以請建議我做錯了什麼?
爲什麼這兩個值有所不同?
請糾正我的錯誤。
編輯
平均值,而我試圖改變編碼NSUTF16StringEncoding
和NSUnicodeStringEncoding
其結果還是不同的,如下
input : pass123
output: 514331e3f7ca0a295539347ebccc4e4f095fe5f3c1df10d43b4d550144c7b30ba9507831893ea63ea22e62e993be529b0d14be7800a90aa0de199d6be62a5f1b
謝謝你的快速反應,但我們是在一個階段,我們不能改變.NET功能,需要編寫目標C compitable功能。 –
@JanakNirmal所以簡單地這樣做:'const char * cstr = [string cStringUsingEncoding:NSUTF16StringEncoding];' – NSAddict
@JanakNirmal:這將是值得說的一開始。在這種情況下,你需要改變你的Objective C代碼來使用'NSUTF16StringEncoding'。 –