Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> SHA-256: różnica między ruby a C#
nasty
post
Post #1





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Hello!

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:
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:
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!

Ten post edytował nasty 12.06.2009, 02:31:51
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


W php dostaje wyniki jak dla C#

Cytat
<pre><?php
$str = 'hn-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a';

$hsh = hash("sha256", $str, false);
echo( "$hsh<br />");
echo( base64_encode($hsh) );

$res = "";
for ( $i = 0; $i < strlen($hsh); $i+= 2 )
{
$a = $hsh{$i};
$b = $hsh{$i+1};
$h= $a.$b;
$d = hexdec($h);
var_dump($h);
var_dump($d);

$chr = chr($d);
$res .= $chr;
}

echo( $res . "\n" );
echo( base64_encode($res) . "\n" );


sprawdz sobie http://en.wikipedia.org/wiki/Examples_of_S...#SHA-256_hashes (tlko ze tu dostajesz zapisz liczby w ASCII a nie bitowo/bajtowo)
Go to the top of the page
+Quote Post
nasty
post
Post #3





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Dobra, temat do usunięcia :-)
był problem w dokumentacji, oni sobie jakąś źle wyliczyli ten hash. Dupki! (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Już działa elegancko.

Ten post edytował nasty 12.06.2009, 03:28:15
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


To co mieli zle?
Go to the top of the page
+Quote Post
nasty
post
Post #5





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


mieli coś takiego:

Cytat
hn-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a
3. Generate an SHA-256 digest in base 64 format on this string, dropping any trailing '=' signs. This
example produces a signature of:

YRYuN2zO+VvxISNp/vKQM5Cl6Dpzoin7mNES0IZJ06U
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


No to wiem z pierwszego posta (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ale jak zrobic zeby zrobic to jak oni maja? tzn "poprawnie"
Go to the top of the page
+Quote Post
nasty
post
Post #7





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Przekazując ten wyliczony przez mój program parameter do web service zadziałało i zmiana jego ręcznie w urlu wywalała błąd, że niepoprawny hesz. Czyli w sumie dobrze to obliczam a oni poprostu pomylili się wklejając to do dokumentacji.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Ok, widze ns SO.com o co chodzilo (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
nasty
post
Post #9





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


tez wchodzisz na so? (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.09.2025 - 12:43