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

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

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

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

Q&A

解決済

1回答

5335閲覧

クライアントから暗号化してサーバーに送り、データベースに格納したいのですが...

mote

総合スコア128

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

0グッド

2クリップ

投稿2018/12/13 07:45

編集2018/12/14 08:10

cryptoJSを用いて
htmlに書き込まれたname,passwordを
公開鍵暗号を用いて暗号化し
socket.ioでサーバー側に送信したいのですが、
上手くいきません。

参考にしたURLはこちらです
https://memolog.org/2015/08/try-cryptojs.html

エラー文では
フロントコンソールで
・Failed to load resource: the server responded with a status of 500 (Internal Server Error)

・Uncaught ReferenceError: CryptoJS is not defined
の二つが出てきてしまいます。

socketを使わずにhtmlのみで実行すれば
上手く暗号化が出来ている事が分かりました。

しかし、サーバーを絡めて
実行するとエラー文が出てきてしまいます。

cryptojs is not defined ということはコールバックの順序がおかしいのでしょうか?

html

1<!DOCTYPE html> 2<html lang="ja" dir="ltr"> 3<head> 4 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> 5 </script> 6 <script type="text/javascript" src="/Users/motegiyuta/Desktop/interface/bower_components/crypto-js/crypto-js.js"></script> 7 <script src="http://localhost:3000/socket.io/socket.io.js"></script> 8 <meta charset="utf-8"> 9 <title>practice</title> 10</head> 11<body> 12 <form name="myid"> 13 <input type="text" name="name"> 14 <input type="number" name="password"> 15 <input type="submit" value="送信"> 16 17 <script type="text/javascript"> 18 let socket = io.connect() ; 19 socket.on("key",function(key){ 20 let name = $(`input[name="name"]`).val() ; 21 let pass = $(`input[name="password"]`).val() ; 22 23 24 let encrypted_name = CryptoJS.AES.encrypt(name, key); 25 let encrypted_pass =CryptoJS.AES.encrypt(pass, key); 26 console.log(encrypted_name.toString()); 27 console.log(encrypted_pass.toString()); 28 29 socket.emit("cryp",function(data){ 30 name : encrypted_name.toString() 31 password : encrypted_pass.toString() 32 }); 33 }); 34 35 </script> 36 </body> 37 </html> 38

⬇︎serverを立てているファイルで略してあります

js

1case "/login.html": 2 fs.readFile("./login.html","utf8",(err,data)=>{ 3 if(err){ 4 res.writeHead(500) ; 5 return res.end("Error") ; 6 } 7 res.writeHead(200,{"Content-Type":"text/html"}) ; 8 res.write(data) ; 9 login_socket(req,res,function(){ 10 res.end() ; 11 }); 12 }); 13 break ; 14 15function login_socket(req,res){ 16 17 io.sockets.on("connection",function(socket){ 18 let key = "aiueo" ; 19 socket.emit("key",key) ; 20 console.log("keysend!") ; 21 22 socket.on("cryp",function(data){ 23 let CryptoJS = require('crypto-js'); 24 let decrypted_name = CryptoJS.AES.decrypt(data.name, key); 25 let decrypted_pass = CryptoJS.AES.decrypt(data.pass, key); 26 console.log(decrypted_name.toString(CryptoJS.enc.Utf8)); 27 console.log(decrypted_pass.toString(CryptoJS.enc.Utf8)); 28 29 let user = new Mongo(decrypted_name.toString(CryptoJS.enc.Utf8),decrypted_pass.toString(CryptoJS.enc.Utf8)) ; 30 user.login(req,res) ; 31 }); 32 }); 33} 34

どなたかお願いいたします

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

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

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

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

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

guest

回答1

0

ベストアンサー

SSL 使えば勝手に通信暗号化してくれるので、二度手間では・・・?

あと CryptoJS を直接ファイルシステム上のアドレスから読み込ませようとしていますが、それは無理です。
ドキュメントルート以下に JavaScript ファイル配置するか、CDN を使いましょう。

html

1<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>

投稿2018/12/14 12:12

yhg

総合スコア2161

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

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

mote

2018/12/14 18:19

すみません。書き忘れていたのですが、すでにインストールをしたため、自分のpc内に入っています
mote

2018/12/14 18:50

記載してもらった通りにしたら出来ました!! 本当に助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問