2015-08-18 58 views
1

我有這段代碼需要轉換爲ruby,此代碼段用於創建用於特定API的安全密鑰。我正在加密的字符串是一個JSON對象。將C#轉換爲Ruby-MD5和Base 64 a字符串

我應該用Digest::MD5.hexdigest()還是Digest::MD5.digest()

C#代碼

string strResponse = "[{\"Key\":\"BookNumber\", \"Value\"=>\"BJAK123\"},{\"Key\"=>\"AuthorCode\", \"Value\"=>\"BNA123\"}]"; 

using (MD5 md5 = MD5.Create()) 
{ 
    byte[] bPayload = Encoding.UTF8.GetBytes(strPayload); 
    byte[] bPayloadHash = md5.ComputeHash(bPayload); 

    strPayloadBase64 = Convert.ToBase64String(bPayloadHash); 
} 

紅寶石代碼

payload = [{"Key"=>"BookNumber", "Value"=>"BJAK123"},{"Key"=>"AuthorCode", "Value"=>"BNA123"}] 


utf8_params = payload.to_json.force_encoding("iso-8859-1").force_encoding("utf-8") 
payload_base64 = Base64.encode64(Digest::MD5.hexdigest(utf8_params)) 
+0

@NeilSlater對不起,請參閱更新的詳細信息。 – olleh

+0

感謝您的更新。在Ruby中編寫一個散列校驗器來處理C#產生的內容,或者僅僅爲了讓Ruby和C#使用相同的API來重建代碼而存在差異。 C#代碼是將代碼發送到Ruby的系統的一部分,反之亦然(在這種情況下,您可能需要關心如何通過Ruby或C#對JSON進行序列化)?如果沒有,那麼你可以從你顯示的代碼中得到答案。 –

回答

2

使用

payload_base64 = Digest::MD5.base64digest(utf8_params) 

Digest::MD5.hexdigest作爲摘要產生的一個十六進制字符串,而C#代碼我s執行摘要的base64編碼。

相關問題