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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

6回答

17447閲覧

SSLを使用せずformのテデータを暗号化しPOSTでPHPに渡したい。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2015/03/21 00:20

編集2015/03/23 08:49

PHP,Javascriptを勉強中のものです。

現在PHPでログイン機能のあるwebページを試しに作っていますが、クライアントからサーバーに送信されるデータの暗号化をしたいと思っております。SSLを使えばいいのでしょうが、証明書の調達などが必要なためなかなか手が出せません。(自作もできるようですが。)

そこで、簡易的にjavascript等でこれができないかと思い質問させていただきました。
しかしjavascriptにはじめて触れるので何をどうしたらいいのか分かりません。

希望としては

lang

1<form method="POST" action="./login.php"> 2メールアドレス 3<input type="text" name="mailaddress"><br> 4パスワード(10字以下) 5<input type="password" name="password" maxlength="10"><br> 6 7<input type="submit" value="テスト" style="width: 100px; height: 50px"> 8</form>

これをsha256等で暗号化した状態でPHP側に渡したいと考えております。

---------------追記---------------
SSLや暗号化って言ってるのにsha256などと書いてあり紛らわしく申し訳ありません。
復号化はできなくても大丈夫です。sha256等なら同じ文字列はハッシュ値も同じになるのでそれをパスワードとしてDBに記録すれば大丈夫だと思っていました。
(もちろん自分が用意したページ以外から生で正しいパスワード送っても弾かれますが、これから作ろうと思っているサイトではそういうことをあんまりさせたくないのでいいかななどと思っております。)
それと、SSLのほうも証明書自作してどんなものか試してみます。

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

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

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

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

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

guest

回答6

0

学習のために自分で利用するだけなんですよね?「自己証明書」っていうのをUNIX上で作成すればSSL証明書はタダで使えますよ?ブラウザがセキュリティ絡みの警告を出してきますが、設定から「ルート証明書のインストール」という操作を手動で行って作成した自己証明書をインポートすればそれも出なくなります。
自己証明書作成についての記事

投稿2015/03/29 07:50

hinata

総合スコア7

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

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

0

英語サイトですが無料のSSL証明書もあるので、
https://www.startssl.com/?app=1
http://qiita.com/k-shogo/items/870b6d3939dd08da2de4
取得してみるのもいいかもしれません。

投稿2015/03/24 10:20

tanat

総合スコア18713

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

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

0

余談ですが、
SSL証明書も最近は3000円/年程度で買えるので(1ヵ月換算で250円)、よほどの苦学生さんとかでなければ、それほど経済的な負担にはならないと思いますよ。自己証明書(いわゆるオレオレ証明書)でもいいんですが、ブラウザの警告が鬱陶しいですしねw
https://www.google.co.jp/search?q=rapidssl

今年あたり無料化するって話しもあったりします。
http://www.itmedia.co.jp/enterprise/articles/1411/20/news049.html

投稿2015/03/21 08:05

編集2015/03/21 08:08
munyaX

総合スコア783

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

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

退会済みユーザー

退会済みユーザー

2015/03/21 10:07

回答有難うございます。 証明書、思ってたよりは安いですね。ただ実は当方、よほどの苦学生だったりしますw(学校の規則によりバイトすらできない。) 自己証明書でのテストは成功し、JSのコードはうまくいっておらず「やっぱりSSLのほうがいいじゃん」という状態です。 これから結局SSLを使おうと思います。とりあえず今は自己証明書でやっていき、無料化を気長に待ちたいと思います。
munyaX

2015/03/21 11:01

余談ついでですが。 > よほどの苦学生だったりしますw 高校生さんとかですか? 学習用途なんであれば、例えば情報処理部でも作って(もしくは入って)学校から予算を引っ張りだせば結構リッチな環境で開発できますよ。余ったPCもらってきてサーバ代わりにしたりね。 あとは学校の規程も、原則禁止ではあるが「家庭の事情」である程度柔軟に対応してくれることがあったりしますよ。まぁ最近はネットでお小遣い稼ぎもできるので、特に技術がなくても500円/月くらいなら簡単ですよ。まぁ参考程度に。
guest

0

SHA256は暗号化ではないです。

公開鍵暗号をJavaScriptで実装すると良いかも知れません。
すなわち...

  1. AJAXを使ってサーバサイドから公開鍵Sを受信する。
  2. クライアントサイドで公開鍵Cと秘密鍵Cを生成する。
  3. クライアントサイドで秘密鍵Cと公開鍵Sを使って、送信したいデータを暗号化する。
  4. 暗号化したデータと公開鍵Cをサーバに送信する。
  5. サーバサイドで、公開鍵Sのペアである秘密鍵Sと公開鍵Cで、暗号化したデータを複合化する。

...ということです。

投稿2015/03/21 02:21

chokojori

総合スコア971

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

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

chokojori

2015/03/21 02:22

率直に言えば、このような実装を書くより、SSL証明書を買う方が早いと思います。
guest

0

アプリケーションレイヤーでこういった暗号化をするのはアンチパターンが気がしないでもないので、
もう一度手法を検討したほうがいいとは思いますがとりあえずこんな感じですかね。

※JQuery使ってること前提で

lang

1$(function(){ 2 var encrypt = function(val) { 3 // なんらかの可逆変換可能な暗号化をする 4 return val + "hoge"; 5 }; 6 7 $('form').on('submit', function(){ 8 var $form = $(this).clone().hide(); 9 10 // formの全要素の値を書き換え 11 $.each($form.serializeArray(), function(k, v){ 12 $form.find('[name="' + v.name + '"]').val(encrypt(v.value)); 13 }); 14 15 $('body').append($form); 16 $form.submit(); 17 18 return false; 19 }); 20});

暗号化部分は適当です。
PHP側で復号化する必要がありますがsha256のハッシュ化するアルゴリズムは
不可逆なので元に戻せません。

投稿2015/03/21 02:07

PruneMazui

総合スコア227

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

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

0

はじめまして。

下記ページにjavascriptでの暗号化・復号化について書かれています。
http://qiita.com/tnakagawa/items/bba972e71cdc4f0f29f5

これを使い、文字が入力されたときまたはsubmitがクリックされたときに暗号化処理を行ってPOSTで値を飛ばし、受け取り側で復号化すればいいのではないかと思います。
ただし、javascriptはPOSTされた値を受け取ることができません。(ライブラリなどを使えばできるかも?)
そのため、PHPで受け取った値をjavascritpに渡して処理をさせる必要があるので面倒かもしれません。
上記ページでの復号化処理が理解できるのであればPHPで復号化処理を作る方が楽かと思います。

試しに作っているWEBページとの事なので問題ないと思いますが、これを外部公開するサイトで使用しても暗号化の意味はありません。
SSLと違い通信そのものを暗号化するわけではないのでPOSTした値が抜き取られ復号化されてしまいます。

投稿2015/03/21 01:58

toaruhetare

総合スコア141

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問