質問
私はいくつかのREST Webサービスを使用するアプリケーションを、開発しています。 それは、技術文書だと、私は、要求のある文字列のSHA256ハッシュを渡すべきであると述べています。
(マニュアルで)文字列例要求に
HN-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires = 1893013926label [0] = ANY / somestatistics = 1D、2D、7D、28D、30D、31D、lifetimestatus = UPL、livetitle = A
実行した後:
digest = Digest::SHA256.digest(string_to_sign)
signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')
ハッシュでの結果ます:
YRYuN2zO + VvxISNp / vKQM5Cl6Dpzoin7mNES0IZJ06U
この例では、ドキュメントはルビーの開発者のためであるとして、ルビーである。
私は、実行時に私は、C#でとまったく同じ文字列のための私のアプリケーションを開発しています:
byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);
と末尾を削除し、 "=" 記号は、私が手に:
Vw8pl / KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw
したがって、アプリケーションは、署名不一致エラーが発生した実行に失敗します。
私はハッシュと何が変更前のバイト配列に文字列を変換しながら符号化を変更しようとした。
任意のアイデア?
解決
文書ここのに基づいて、あなたが不足している - (つまりあなたの文字列のダッシュ)。 Acrobatは親切ドキュメントからコピーペーストでそれを取り除くようだ...
ここでは(あなたが最終的=をトリミングした場合だけでなく、それはある)の例と同じ値を取得し、私は一緒にスプラッティング、いくつかのコードがある
string s = "hn-Rw2ZH-YwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a";
SHA256Managed sh = new SHA256Managed();
byte[] request = System.Text.UTF8Encoding.UTF8.GetBytes(s);
sh.Initialize();
byte[] b4bbuff = sh.ComputeHash(request, 0, request.Length);
string b64 = Convert.ToBase64String(b4bbuff);
所属していません StackOverflow