我有这个代码需要转换为ruby,这个代码段是为了创建一个用于特定API的安全密钥。我正在加密的字符串是一个JSON对象。
我应该使用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);
}
Ruby代码
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 :(得分:2)
使用
payload_base64 = Digest::MD5.base64digest(utf8_params)
因为Digest::MD5.hexdigest
生成十六进制摘要字符串,而C#代码正在对摘要执行base64
编码。