問題タブ [rijndaelmanaged]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Rijndael: 同じ文字列、異なる結果
現在、Web 機能として提供する必要がある小さなデスクトップ アプリ (.Net) がありました。このアプリには暗号化用のコードが含まれており、.Net フレームワークの Rijndael クラスを使用しています。コードは入力文字列を受け取り、それを暗号化し、結果をファイルに書き込みます。すべてのコードが 1 つのクラスに含まれているため、そのクラスを Web サービス アプリケーションにコピーしただけです。元のアプリと新しいアプリで同じキーを使用して同じ文字列を暗号化すると、結果が異なります。元のアプリが提供する結果文字列は、Web サービスが提供する結果文字列のサブセットです。後者には、暗号化された文字列の末尾に追加の文字があります。
以下は私が使用しているコードです。私はこのコードを開発したわけではなく、完全に理解しているわけでもないことに注意してください。行動の違いについて何か考えはありますか?助けてください!!
これは、ユーザー入力を取得してエンクリプターを呼び出すコードです。
これは暗号化コードです。
IV 値を設定するコード:
c# - MonoTouchで1つの暗号化機能を使用して複数の文字列を暗号化できないのはなぜですか?
次の(トリミングされた)クラスを使用して、iPadアプリからWCFWebサービスにデータを送信する前に一部のデータを暗号化します。
サーバーとiPadで次のコードを実行すると、どちらも同じ暗号化された文字列を出力します。
ただし、2番目の値を暗号化しようとすると、サーバーとiPadでの結果が異なります。
サーバー上で逸脱したiPadの結果を復号化すると、復号化された文字列の一部がぎこちないものになります。サーバーからの暗号化された結果は正しく復号化されます。
FlawedAlgorithm
呼び出しごとに新しいインスタンスを作成しても、問題は発生しません。例:
これは、問題が関係するオブジェクトの状態のどこかにあると私に思わせます。メソッドbuffer
内の変数を調べましたが、インスタンスによって生成された値は正しいです。これは、フィールド(またはその基礎となる実装)が原因であることを意味します。Encrypt(string)
UTF8Encoding
encryptor
最初の暗号化された値のサイズを変更し始めると、2番目の暗号化呼び出しの結果に変化が見られます。これはおそらく、ストリームの一部が適切にクリアまたは上書きされていないことを意味します。FlawedAlgorithm
ただし、クラスが使用するストリームは、その状態の一部ではありません。これらは、メソッド呼び出しごとに再作成されます。そして、encryptor
オブジェクトはそれ自身のストリームを管理するタイプのようには見えません。
他の誰かがこれに似た問題に遭遇しましたか?RijndaelManaged
クラスに欠陥がありますか?または、この暗号化の例とは関係のない、MonoTouchのストリームおよびメモリ管理の落とし穴がここで発生していますか?
PS:私はこれをiPadとiPadシミュレーターの両方でテストしました。どちらもこの奇妙な動作を示します。
c# - 暗号化キーを変更しても、古いデータを復号化できるようにするにはどうすればよいですか?
C# で対称キーを作成し、それを使用して文字列を暗号化し、最終的にデータベースに格納する必要があります。これを実現するには、.Net で AES メカニズムを使用します。同じキーを使用して、暗号化されたデータを復号化します。
今、私の要件は、キーを変更するメカニズムがあるかどうかです。新しく作成したキーを使用して、古いキーまたは期限切れのキーで暗号化された文字列を復号化できることを確認するにはどうすればよいですか?
encryption - データを復号化できるようにするには、初期化ベクトルが必要ですか?
RijndaelManagedを使用してデータの暗号化と復号化を行っています。初期化ベクトルのポイントを誤解しているかもしれませんが、データを復号化するときに別の値に設定すると、最初の16文字を除くすべてが正しく復号化されることがわかりました。それは期待される動作ですか?
vb.net - VB.Net での単純な暗号化/復号化
VB.Net で文字列を暗号化/復号化する方法を見つけようとしています。
hereの例に従って、次のコードを記述しました(以下)。テキスト ボックス、「暗号化」ボタン、および「復号化」ボタンがあります。テキスト ボックスに何かを入力し (「hello world」など)、[暗号化] をクリックすると、暗号化されたバージョンがテキスト ボックスに表示されます。「復号化」をクリックすると、元の文字列に戻ります。
しかし、暗号化しようとすると、「FlushFinalBlock」を実行しようとするとエラーが発生します。エラーは「暗号化するデータの長さが無効です」です。
上記の例は暗号化のみを扱っており、復号化は扱っていないため、「復号化」の部分は暗闇での完全なショットです。間違っていると確信していますが、「暗号化」を機能させることができないため、まだテストしていません。
なぜこれがうまくいかないのか誰か教えてもらえますか?
c# - RijndaelManaged を使用してデータを復号化できないのはなぜですか?
メッセンジャーと同じようにメッセージを送受信するプログラムに取り組んでおり、送信ボタンでメッセージを暗号化し、受信時にメッセージを復号化する必要があります。RijndaelManagedクラスと次のメソッドを使用して暗号化/復号化しています
と
以前のメソッドを呼び出す方法は次のとおりです。
問題は、暗号化例外を復号化するときに例外が発生することです。復号化するデータの長さが無効です。理由がわかりません。
c# - javascript slowAES を使用して、暗号化されたテキストを C# から PhantomJS スクリプトに送信するにはどうすればよいですか?
サーバー上の PhantomJS で実行されるスクリプトを持っています。スクリプトへのコマンド ライン引数としてパスワードを渡す必要があります。PhantomJS に慣れていない方のために説明すると、PhantomJS は、クライアントからの操作なしでサーバー側で実行されるヘッドレス Webkit ブラウザーです。
パスワードを PhantomJS の仮想 Web ページ オブジェクトのコンテキストに読み込むには、特定の Web ページ オブジェクトに含まれる JavaScript ファイルにパスワードを保存する必要があります。パスワード ファイルは、ログインに必要な期間のみ保持され、削除されます。スクリプトがファイルを必要としなくなった後にファイルを削除するフェイルセーフメカニズムがあります。このパスワードを平文で保存したくないので、AES 暗号化を使用します。
パスワードは、AES 暗号化を使用してデータベースに保存されます。この方法でパスワードを保存するのが最も安全な方法ではないことはわかっていますが、スクリプトはパスワードを知る必要があるため、ハッシュはオプションではありません。
ASP.NET MVC3 Web アプリケーションで C# からこの PhantomJS スクリプトを呼び出し、AesManaged または RijndaelManaged を使用して C# から暗号化されたパスワードを渡したいと考えています。私は暗号化の基本を理解しており、C# と JavaScript でコードを動作させることができました。ただし、C# からテキストを暗号化すると、javascript で復号化できません。例として、私の C# コードの一部を次に示します。
JavaScript コードは、slowAES 実装を使用します。
JavaScript のこのコードは、暗号化と復号化の簡単なテストを実行できるようにセットアップしただけです。C# と JavaScript の間で暗号化と復号化が機能するようになったら、PhantomJS からのコマンド ライン引数としてパスワードを処理します。
キーと IV は次のとおりです。
テキスト 'test' の暗号化を実行した後の C# コードの出力は次のとおりです。
JavaScript からの出力は次のとおりです。
slowAES は PKCS7 パディングを使用するため、C# コードに PKCS7 パディングを適用しました。PKCS7 パディングの独自の実装を使用してみましたが、同じ結果のバイト配列は得られませんでした。何か不足している場合はお知らせください。どうもありがとう。
c# - Rijndael/AES 復号化 C# から PHP への変換
私はC#で次のコードを持っています
このコード スニペットは、特定のファイルを復号化し、復号化されたバージョンを出力します。RijndaelManaged im の CreateDecryptor メソッドで、パスワードを KEY および IV として使用します。
ここでPHPのstackoverflowでいくつかのコードを見つけましたが、C#のようにキーと同じバイト配列をivに渡そうとしても何も起こりません。
PHPでコードを適切に作成する方法について、本当に助けが必要です。PHP でファイルを出力する必要はありません。文字列で十分です。
UPDATE : デフォルトの C# RijndaelManaged 暗号方式は AES-128-CBC です。PHPコードをそのmcryptモジュールに変更しました(デフォルトのC#暗号メソッド)
更新 2: Java Decryptor を作成することができたので、別のことがわかりました。PHP は PKCS7 パディングを使用する必要があります。
.net - データのAES暗号化に使用される初期化ベクトルCAPICOMを見つけるにはどうすればよいですか?
CAPICOMを介してデータを暗号化し、データベースに保存するClassicASPで記述されたアプリケーションがあります。暗号化コードは次のようになります(クラシックASP、VB。簡潔にするために少し簡略化)。
これで、このデータを読み取って復号化する必要がある.NETアプリケーションができました。クラスを使用する前に、.NETでAES互換の暗号化/復号化を実行しましたRijndaelManaged
。同じ方法を使用して、このデータを復号化できることを望んでいます。ただし、これをCAPICOMの暗号化されたデータで機能させる方法がわかりません。これは、をRijndaelManaged
呼び出すときにキーと初期化ベクトルを渡す必要がありRijndaelManaged.CreateEncryptor
、CAPICOMは初期化ベクトルを受け取らないためです。CAPICOMは初期化ベクトルを使用している必要がありますが、公開していないと思います。どうすればそのベクトルを見つけることができますか?
c# - ディスクに書き込むことなく、StreamReaderを使用して復号化されたRijndael暗号化ファイルにアクセスする
私は現在、.dllファイルに埋め込まれているプレーンテキストファイルの暗号化/復号化に取り組んでいます。プレーンテキストファイルはスクリプトであり、必要に応じて解析されます。
現時点では、これが(プレーンテキスト)スクリプトファイルのロード方法です。
RunScriptメソッドは、スクリプトの1行を文字列に読み取り、それを解析します。各行を順番に調べ、見つかったときにスクリプトで定義した各アクションを実行します。
とにかくアウトdllファイルは暗号化されていないため、dllに埋め込む前に各スクリプトファイルを暗号化する必要があると判断しました。C#/。NETでの実装が容易なため、Rijndaelアルゴリズムを決定しました。
現在、暗号化は次のように実行されます。
これは、復号化はいくつかのコマンドを実行して復号化されたファイルを取得することの問題であることを意味します...ただし、残りのコードの設計のために(暗号化は「システムを実行した後」特定の標準」)の場合、ファイルはStreamReaderオブジェクトとして返される必要があります。現時点では、これが要求されたファイルを復号化する方法です。
Rijndaelを使用してファイルを復号化する方法を知っている人はいますが、StreamReaderオブジェクトのインスタンスに/として出力にアクセスできますか?
私はこれを行う方法をインターネットで長い間調べてきましたが、最も近いのは、文字列に復号化するのではなく、decryptReaderの内容を別のStreamReaderオブジェクトにコピーすることでしたが、あるStreamReaderから別のStreamReaderへ-間違っている場合は修正してください。
バグが発生する可能性があるため、既存の(ここでは共有していない)コードベースをできるだけ変更する必要があります。また、ファイルをディスクに書き戻さずにこれを実行したいと思います(明らかに、暗号化する理由があります)。
よろしくお願いします。はっきりしていなかったり、少し漠然としていたらごめんなさい。あなたが私を助けるためにそれを必要とするならば、私はより多くの情報を加えることができます。
ジェイミー