質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

4169閲覧

postされてきたsha256の受取後の処理について

Mkato

総合スコア118

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/02/08 08:57

Rails 4.2.3
ruby 2.1.3

sha256の受取後の処理についてご質問が御座います。
railsにてアプリを制作しており、相手からポストされてくるデータの処理をしたいと考えておりまが、どの様にsha256の値を処理すれば良いのか分かりません。

相手側から送られてくるデータ

ruby

1 2aaa = "aiueo" 3bbb = "kakikukeko" 4post_data = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), aaa, bbb) 5 6#結果=>"eb61c1e3337c1706c2041d67e11211b66bb942e233ee99ef3840d57003a686f5" 7

私側で行いたいこと。
結果=>"eb61c1e3337c1706c2041d67e11211b66bb942e233ee99ef3840d57003a686f5"を受取り、bbb = "kakikukeko" であればaaa = "aiueo" dbに保存させたいと考えております。

ruby

1 2skip_before_filter :verify_authenticity_token 3 4#どの様に 5"eb61c1e3337c1706c2041d67e11211b66bb942e233ee99ef3840d57003a686f5" 6を受け取ればよいでしょうか? 7 8↑ここでsha256でデコード?して、 9aaa = "aiueo" 10bbb = "kakikukeko" 11といった感じにしたいと考えております。 12 13def create 14 15 if "kakikukeko" = bbb 16 17 aaa.save 18 personal = {'status' => 200} 19 else 20 personal = {'status' => 500} 21 end 22end 23

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

sha256などの「ダイジェスト」は、「暗号化」とは違います。元データからダイジェストへの変換は、非可逆なので、ダイジェストから元のデータに戻すことはできません。通常、ダイジェストは、暗号化していないデータと共に送信され、受信者側が、受信したデータが、本当に送信者本人から送られたものか(偽造や改ざんされてないか)を検証するために用います。

今回はどのような処理を実現しようとしていますか? 暗号化? それとも 改ざん防止?


2016年2月8日 追記

コメントありがとうございます。sha256ダイジェストを受信したデータの検証用途に使われるのですね。その場合は、コメントいただいた通りの方法で処理すればOKです。(まとめると、以下のようになります)

前提:

  • 相手側(送信側)と受信側が、bbbという「秘密の情報」を事前に共有している
  • 送信されるデータは、aaaというデータ自体と、検証用のsha256ダイジェスト

手順:

  1. 相手側が、aaaとbbbを元に、sha256ダイジェストを算出する。
    digest = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), aaa, bbb)
  2. 相手側が、aaaとダイジェストを受信側に送信する。
  3. 受信側では、相手側と全く同じに、aaaとbbbからsha256ダイジェストを算出する。
  4. 算出したダイジェストが、送られてきたダイジェストと一致すれば検証OK。

投稿2016/02/08 09:14

編集2016/02/08 10:07
tatsuya6502

総合スコア2035

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mkato

2016/02/08 09:43

ご回答有難う御座います。 sha256を元データには戻す事が出来ないんですね。。。検証する為に使用すると。 実現したい事は今回相手からpostされてくるデータを受取りdbに保存したいと考えております。 頂いた内容でsha256で送らてくる意味が理解出来た様な気がします。 相手側から送られてくるデータ ```ruby aaa = "aiueo" bbb = "kakikukeko" post_data = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), aaa, bbb) body = { aaa: aaa } #結果=>"eb61c1e3337c1706c2041d67e11211b66bb942e233ee99ef3840d57003a686f5" ``` 私の方はbbb = "kakikukeko"を持っている(知っている)ので bodyで送られてきた値(aaa = "aiueo")とbbbをsha256で処理して相手から送られてくるsha256と同じ結果だと相手から送られてきたと確認出来るといった感じでしょうか。
tatsuya6502

2016/02/08 09:49

ああ、なるほど! これでしたら、検証用途(本人確認とか、改ざん防止)ですね。 はい、そのやり方で合ってます。相手側と全く同じ方法でsha256でダイジェストを計算して、相手から送られてきたダイジェストと一致すれば検証OKとします。
Mkato

2016/02/09 14:48

検証の処理を行い、プログラム完成しました。 今まではapiなどでsha256でpostしたりしていましたが、初めて受け手になり意味をようやく理解出来ました。 本当に有難う御座いました。
tatsuya6502

2016/02/09 15:01

完成しましたか! おつかれさまでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問