問題タブ [cryptojs]
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.
javascript - 小さな文字列のネストされたマップを同じ対称鍵で暗号化する
ユーザーが(機密情報を含む)ネストされた文字列のツリーを作成できるWebアプリケーションを作成しているとしましょう。これらの文字列はおそらく非常に短いです。保存する前に、このツリーのキーと値の両方を暗号化したいと考えています。ツリー内のすべての値は、ユーザーが指定した対称キーを使用してクライアント側で暗号化されます。同様に、読み取り時にクライアント側で復号化されます。
ツリーは Mongo データベースに永続化されます。
ツリー内のすべてのデータが同じキーを使用して暗号化されることを考慮して、ツリーをシリアル化して文字列全体を暗号化するか、値を個別に暗号化するかを決定できません。
どちらの長所と短所は何ですか?
私が知る限り、AES は 128 ビットのブロック サイズを使用します。つまり、文字列はエンコード時に最大 15 文字の長さになる可能性があり、シリアル化された文字列をエンコードすることを支持します (オーバーヘッドを避けたい場合)。
注: webapp は HTTPS、IP ホワイトリスト、および多要素認証の両方を使用しますが、Mongo データベースが盗まれた場合に備えて、データ侵害を防ぐ努力をしたいと考えています。それが私がここにいる目的です。これを達成する方法についてのアドバイスや考えをいただければ幸いです。
アップデート
さらに、私のサービスが信頼を刺激することも望んでいます。(HTTPS 経由ではありますが) 平文でデータを送信するということは、データを永続化する前に、ユーザーがデータを暗号化することを信頼する必要があることを意味します。クライアント側を暗号化すると、何を保存しているのかわからない (または知る必要がない) ことを強調できます。
cryptojs - crypto-jsを使用してC#で暗号化されたAESを復号化する
私は次のようにC#でAESを使用して文字列を暗号化しています:
そして、私はjavascriptで暗号化されたテキストを復号化したいので、crypto-jsで試しました:
私が得た復号化されたテキストは空です。エンコーディング、キーサイズなどを複数変更してみました
必要に応じて別のJavaScriptライブラリを使用できます
javascript - CryptoJS の AES-CTR は PyCrypto と互換性がありますか?
PyCrypto ライブラリを使用して AES-CTR-256 データを復号化しようとしています。暗号文は、CryptoJS ライブラリに依存する Cryptocat マルチパーティ チャット Javascript コードによって生成されました。IV スキームは、Cryptocat Multiparty Protocol Specificationで説明されているとおりです。
初期化ベクトル (IV) は 16 バイトで構成されます。12 バイトはランダムに生成され、4 バイトはカウンターとして機能し、ブロックごとに 1 回インクリメントされます。
(12 のランダム バイトは、4 つのカウンター バイトの前に来ます。)
ここに私のPythonコードがあります:
そして、これは Javascript で同じことを行う方法です:
- CryptoCat 拡張機能をインストールする
- CryptoCat を実行する
- 開発者コンソールを起動します (Chrome/Firefox では F12)。
- これらのコード行を実行します
期待される出力: "Hello, world!ImiAq7aVLlmZDM9RfhDQgPp0CrAyZE0lyzJ6HDq4VoUmIiKUg7i2xpTSPs28USU8"
. 予想通り、これは Javascript で動作します。
ただし、Python コードの出力は意味不明です。repr(平文) は以下を与えます:
なぜこれが起こっているのかわかりません。私の IVCounter 実装は、JS コードが使用するスキームと一致していると確信しています。CryptoJS の NoPadding オプションに相当する Python がないということでしょうか? 私は困惑しています。
助けてくれてありがとう!
javascript - CryptoJS.AES.decrypt の失敗の理由は?
関数は空のCryptoJS.AES.decrypt
WordArray を返しています。
私のパラメータはsecret
、key
、およびiv
です。key は 256 ビットの WordArray であり、正しいことが確認されています。iv は 128 ビットの WordArray であり、正しいことも確認されています。
secret は php を使用して暗号化されopenssl_encrypt()
ます - 平文は 32 バイトです - 結果は 48 バイトです (したがって、正しくパディングされているようです)。
私は秘密をWordArray、Hex文字列、base64文字列として試しましたが、呼び出すと:
復号化されたものは空の WordArray です。それは私を怒らせています...何が失敗していますか?エラーは、パディング形式または何か奇妙なもので、どこかに秘密にされていると思いますが、Cryptojs
以前penssl_(encrypt/decrypt)
は相互に互換性があることが証明されていました。気が狂う前に助けてください。
javascript - cryptojs を使用して base64 でエンコードされた暗号文をキー / iv で復号化する
私の暗号文は、PKCS1 パディングを使用して AES-128-CBC モードで暗号化されています。私のキーとIVと同様にbase64でエンコードされています。この暗号文を CryptoJS で復号化しようとしていますが、問題が発生しています。これが私の(機能しない)コードです:
すべての . は base64 でエンコードされた文字列です。私が収集しているドキュメントから、CryptoJS はデフォルトで CBC モードと PKCS7 パディングを使用することがわかりました。
それが機能しない理由はありますか?
編集:私のjsfiddle: http://jsfiddle.net/NSmxY/1/
java - CryptoJS AES と Java AES の暗号化された値の不一致
クライアントで暗号化し、AESを使用してサーバーで復号化しようとしているため、cryptojsを使用してクライアント側でCBCモードで暗号化し、サーバー側でnopaddingを使用Cipher
して、同じモードとnopaddingのクラスも使用します
サーバー側コード
実装
結果
誰でも間違いを指摘できますか?
javascript - AES CryptoJS で暗号化し、Coldfusion で復号化する
外部システムから暗号化された文字列を受け取り、合意されたアルゴリズム/エンコーディングのセットアップに基づいて復号化する、Coldfusion9 で記述されたサイレント ログイン サービスがあります。これは、ASP/JAVA/PHP を実行しているシステムから何年もの間問題なく機能していましたが、現在、CryptoJS を使用して暗号化を実行するしかないクライアントがあり、私の人生では、なぜこれが機能しないのかわかりませんColdfusion で復号化します。
暗号化に関する私の知識は素晴らしいものではありませんが、CryptoJS で暗号化されたまったく同じ文字列/キーの暗号文は、暗号化を実行するたびに異なることに気付きましたが、Coldfusion/Java では常にまったく同じ暗号化された文字列を期待できます。これがエンコーディングに関連しているかどうかはわかりませんが、以前に他のシステムから暗号化された文字列を受け入れるこの問題に遭遇したことはないので、CryptoJS で暗号化する方法が間違っていることを願っています。