いくつかの 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
ドキュメントは Ruby 開発者向けであるため、この例は Ruby で記述されています。
私は C# でアプリケーションを開発しており、実行時にまったく同じ文字列を使用しています。
byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);
末尾の「=」記号を削除すると、次のようになります。
Vw8pl/KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw
したがって、アプリケーションは実行に失敗し、署名の不一致エラーが発生します。
ハッシュの前に文字列をバイト配列に変換しながらエンコーディングを変更しようとしましたが、何も変わりませんでした。
何か案は?