2012-02-08 28 views
2

您好我有使用下面的代碼生成一些字符串:轉換爲長期在C#

private static string CalcHashCode(byte[] data) 
{ 
    MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider(); 
    Byte[] hash = md5Provider.ComputeHash(data); 

    return Convert.ToBase64String(hash); 
} 

我怎樣才能得到一個唯一的從base64編碼字符串,我的意思是,相反的操作,然後將其轉換爲長?

private long CalcLongFromHashCode(string base64Hashcode) 
{ 
    //TODO 
} 

在此先感謝。

+0

([在C#或Java的Base64解碼]的可能重複http://stackoverflow.com/questions/1915898/ base64-decode-in-c-sharp-or-java) – dasblinkenlight 2012-02-08 16:35:07

+1

這是真的*相反的操作嗎? – Humberto 2012-02-08 16:41:54

+0

如果不顯着截斷您的散列值,則將MD5轉換爲long值將不起作用。 MD5吐出一個128位的數字,一個長的是64位(現在)。 – 2012-02-08 16:47:46

回答

8

你不能基地-64字符串轉換爲long(或者,如果它不適合,它可能會被截斷爲long只使用8個字節)...

有可能將其轉換爲一個字節數組(這就是「相反」操作):

byte[] hash = new byte[] { 65, 66, 67, 68, 69 }; 
string string64 = Convert.ToBase64String(hash); 
byte[] array = Convert.FromBase64String(string64); 

如果陣列包含至少8個字節,那麼你可以讓你的長期價值:

long longValue = BitConverter.ToInt64(array, 0); 
4

首先,將字符串轉換爲一個byte [],

var array = Convert.FromBase64String(base64Hashcode); 

然後將字節數組轉換爲長

var longValue = BitConverter.ToInt64(array, 0); 

正如已經提到的,你會得到截斷。


相反方向:

var bits = BitConverter.GetBytes(@long); 
var base64 = Convert.ToBase64String(bits); 

實例:

218433070285205504 : "ADCMWbgHCAM=" 
long.MaxValue : "/////////38="