web-dev-qa-db-ja.com

JavaScriptで文字列を暗号化し、C#でその文字列を復号化するにはどうすればよいですか

私は以前にこの質問が出されるのを見たことがありますが、これらのケースでは、ポスターは公開されているWebサイト上の何か(通常はURL)を暗号化することを望んでおり、その応答はほとんど「ありません」でした。ただし、私の場合、JavaScriptは非公開の内部システムに保存されるため、余裕があると思います。 JavaScriptでURLを暗号化し、c# で復号化する方法-と答えは実際には質問に答えません。

私の「JavaScript」は実際には「SuiteScript」であり、「SuiteScriptは、開発者がNetSuiteを拡張する機能を提供するJavaScriptベースのAPI」として定義されています。私の会社の従業員を除いて、誰にも隠されています(安全に隠されていると考えられています)。

私がしたいのは:

  1. クエリ文字列を生成します(例:userid = guidValue&firstName = stringValue&company = stringValue&...)、
  2. 安全な方法(AES256、RSAなど、安全であると誰かが提案できるものは何でも)を使用して暗号化します。
  3. c#ベースのWebサイトのWebページを呼び出して、この文字列をURLに渡します(例:mysite.com/mypage.aspx?encStr=encryptedString)
  4. そのC#ページで暗号化を解除し、名前と値のペアを分離して処理します。

私はグーグルで検索してstackoverflowを検索しましたが、両方のテクノロジーで使用できる暗号化方法の明確な指示を提供する記事や回答は見つかりませんでした。誰かがそのような指示を持っていますか?

17
QMKevin

対称的

最も簡単な方法は、標準を実装する Stanford Javascript Crypto Library としてライブラリを使用し、C#で同じ暗号を使用することです( AesManaged または AesCryptoServiceProvider )。

対称的な暗号が得られますが、両方のライブラリーが機能するために設定するパラメーター(鍵)は1つだけです。

非対称の

代わりに非対称(公開鍵)暗号を使用することもできます。 JavaScriptコードを入手した攻撃者は、巧妙に細工されたリクエストをサーバーに送信することはできますが、他のリクエストを傍受することはできません。

JavaScriptのRSA の実装があり、 RSACryptoServiceProvider クラスは.Netでサポートを提供します

A 完全な例はコードプロジェクトで利用可能 パディングをサポートするためにJavaScriptライブラリにRSAへのパスを含めます(.Net実装を使用する場合は必須)

注意

これらのソリューションは両方とも、それ自体が再生に対して脆弱です(攻撃者が文字列を傍受し、後で(場合によっては複数回)サーバーに送信します)。

19