簡體   English   中英

iOS和.NET之間的Base64編碼差異

[英]Base64 encoding difference between iOS and .NET

我正在使用50%iOS和50%Microsoft.NET C#的系統。 系統中使用的主要ID是Guids / NSUUID,這些ID有時會轉換為Base64字符串。 我在.NET和iOS如何執行base64轉換方面存在差異。

這是我的Objective-C代碼,用於將NSUUID(以字符串格式)轉換為Base64字符串:

+(NSString*)getBase64IdFromGuidStringWithString:(NSString*)stringInGuidFormat
{
    NSLog(@"stringInGuidFormat is %@",stringInGuidFormat);

    NSUUID* nsuuid = [[NSUUID alloc] initWithUUIDString:stringInGuidFormat];
    uuid_t uuid;
    [nsuuid getUUIDBytes:uuid];
    NSData* data = [NSData dataWithBytes:uuid length:16];
    NSString* base64 = [data base64EncodedString];

    NSLog(@"base64 is %@",base64);
    return base64;

}

其中[data base64EncodedString]由Matt Gallagher提供

這是.NET C#中類似的方法來執行相同的操作:

private string convertGuidStringToBase64(string elementAsString)
{
    Guid isAsGuid = new Guid(elementAsString);
    string base64 = Convert.ToBase64String(isAsGuid.ToByteArray());
    return base64;
}

給定一個起始字符串值CBB2B719-D129-4051-B694-4204A6F6BE93,我得到以下結果:iOS認為base64值為y7K3GdEpQFG2lEIEpva + kw == C#認為base64值為GbeyyynRUUC2lEIEpva + kw ==

顯然我出了點問題! 誰能指出我的錯誤,並指出正確的方向來解決它!

非常感謝。

這看起來非常像字節順序問題。 Base64解碼后,這兩個值是:

cb b2 b7 19 d1 29 40 51 b6 94 42 04 a6 f6 be 93

19 b7 b2 cb 29 d1 51 40 b6 94 42 04 a6 f6 be 93

注意頭4個字節被反轉了嗎?

如果要使用相同的值,則必須確保使用相同的字節順序。 我建議轉換為網絡字節順序以實現可移植性。

希望這可以幫助

干杯帕特里克

Base64轉換不是問題。 它是標准化的,並且可以在所有平台上運行。 它將一系列字節從字符串轉換為字符串,因此字節字節順序在這里不會成為問題。

剩下我們NSUUID和Guid。 看來它們在兩個系統上的存儲方式不同。 它們以不同的順序(也稱為字節)將字節存儲在內存中。 字節順序。 因此,它們的Base64編碼值也將不同。

我建議您閱讀有關UUID和Guid的文章,尤其是它們如何將數據存儲在內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM