Wiem, że to może nie forum do tego, ale już wychodzę z siebię :S
Chodzi o to, że mam pewną dokumentację techniczną do pewnego serwisu, gdzie muszę użyć jego REST-owych usług. Dokumentacja jest napisana pod kątem ruby, a ja piszę aplikację w C# ale to nie problem - da się zrozumieć.
Problem jest w tym, że muszę wygenerować hash SHA-256 dla pewnego ciągu znaków i przekazać go w parametrze w formacie Base 64.
W dokumentacji jest napisane, że ciąg znaków:
Kod
hn-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a
po wykonaniu(ruby) :
Kod
digest = Digest::SHA256.digest(string_to_sign)
signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')
zwraca nam: signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')
Kod
YRYuN2zO+VvxISNp/vKQM5Cl6Dpzoin7mNES0IZJ06U
w mojej aplikacji mam identyczny ciąg znaków i po wykonaniu(C#):
Kod
byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);
zwraca mi: string friendlyHash = Convert.ToBase64String(rawHash);
Kod
Vw8pl/KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw
i też wywalam końcowe "=" jak wymaga tego specyfikacja techniczna.
Próbowałem zmienić Encoding, w czasie zamieniania stringu na ciąg bajtów ale nic z tego.
Ogólnie jest 3:30 nad ranem i przestaję myśleć, może ktoś mądrzejszy rzuci na to okiem?
Dziękuję z góry!