問題タブ [webcrypto-api]
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 - CryptoKey を LocalStorage に保存するには?
既存のプロジェクトで Web 暗号化 API を使用したいと考えています。何かを暗号化および復号化するには、CryptoKey を使用する必要がありますが、CryptoKey を localStorage に保存すると、オブジェクトではなく文字列 (CryptoKey) のみが保存されます。
CryptoKey を単純な型 (文字列) でシリアル化/変換することは可能ですか?
私の解読方法は
もちろん、エラーメッセージは次のとおりです。
'SubtleCrypto' で 'decrypt' を実行できませんでした: パラメータ 2 はタイプ 'CryptoKey' ではありません。2localStorageHandler.js:39 CryptoPromise[オブジェクト暗号鍵]
localStorage を使用せずに復号化すると、データの暗号化に問題はありません。
javascript - ダイジェストは異なるデータで同じ値を返します
私は Javascript Forge を使用して一部のデータのダイジェストを取得しています。現在、実験はさまざまなドキュメントで行われており、次のコード行は常に同じハッシュを返します。
なぜこうなった?何か不足していますか?
さまざまなブラウザで試してみましたが、まだ同じ digestHash 値です
javascript - 暗号 ECDH 公開鍵を解析して JWK 形式に変換し、WebCrypto で使用する
ECDH 鍵ペアを生成し、そこから公開鍵を取得しました。nodejs と crypto ライブラリを使用します。
この公開鍵、ECDH アルゴリズム、および WebCrypto のSubtleCryptoインターフェイスを使用してデータを暗号化するクライアント側ライブラリを実装しています。
これを達成するには、公開鍵 (nodejs 暗号で生成された) をインポートする必要があります。jwk
他のものよりも使用されていることに気付きました。
の例jwk
は
では、公開鍵をjwk
オブジェクトに解析するにはどうすればよいですか。私の公開鍵は次のようになります。
04f8b2a6e9d2ffa424c3e7b6addf23112153920fd0209390da460f99e03bf8665052e72df4a0b7927381f1b026c98a3a2b348fdd10969875e6b0e86cb1f093a5fc07e49fbbbf091922ce71af17f4a79de03f6069836a7143b137be34451f162235
javascript - Web アプリケーションでクライアント側の暗号化を使用する場合、キーはどこに保存する必要がありますか?
JavaScript Web Crypto APIを使用してクライアント側の暗号化を Web アプリケーションに追加したいとします。私のアプリケーションのクライアント側は、暗号化されたデータをサーバーに送信する前にキーを使用して各ユーザーのデータを暗号化し、サーバーから返されたデータを復号化して表示します。
ユーザーは、このようなアプリケーションの鍵を、使いにくくすることなく、どのように保管するのでしょうか?
キーをブラウザに保存する簡単な方法はありますか?
または、各ユーザーは自分のコンピューターのローカル ファイルにキーを保持し、ログインするたびにそれを Web アプリにインポートする必要がありますか? Apple Keychain のような別のパスワード マネージャーを使用できますか?
javascript - IE11 の Web Worker から MSCrypto にアクセスできますか?
IE11 の Web Crypto は の中にありますがwindow.msCrypto
、Firefox や Chrome の場合は でアクセスできますwindow.crypto
。
Web Worker はコンテキストにアクセスできませんwindow
が、ありがたいことに、Chrome と Firefox もcrypto
Web Worker コンテキストで変数を公開します (したがって、グローバル レベルではthis.crypto
、Web Worker の Web Crypto スイートにアクセスするために使用できます)。ただし、IE11 はWeb Worker コンテキストで公開していないようです。this.msCrypto
あれは正しいですか?IE11 Web Worker で Web Crypto を使用する方法はありますか?
javascript - Javascript - USB トークンからのキー/証明書
JavaScript を使用して、 USB トークンまたはBrowser に保存されている証明書からキーを取得することはまだ不可能かどうかを尋ねたいと思います。WebCryptoApiではそれができないという多くの記事を読んでいました。
トークンからキーを取得するオプションはありますか? もしかして何か変わった?
javascript - CryptoKey ArrayBuffer から base64 へと戻る
私はこの問題をどのように解決するのだろうと思っていました。WebCrypto API を使用して RSA-OAEP キーペアを生成し、ArrayBuffer としてエクスポートするキーペアから pkcs8 の秘密キーをエクスポートし、この ArrayBuffer を base64 にエンコードして、PEM として保存できるようにします。
このテスト例では、鍵を pkcs8 としてエクスポートし、この pkcs8 を CryptoKey にインポートしています。問題は、機能する場合と機能しない場合があることです。
これらはコードの結果です: 注: これらの状態の 1 つだけが一度に発生するわけではありません。注 2: この例には、-----BEGIN PRIVATE KEY----- プレフィックスとサフィックスは含まれていません。キーのみをエンコードしています。
Case1: Uncaught (in promise) URIError: 不正な URI (…)b64DecodeUnicode @ try.php:20b64toab @ try.php:70wayBack @ try.php:66(anonymous function) @ try.php:56
Case2: undefined:1 Uncaught (in promise) DOMException
ケース 3: OK - ずっと機能します。
エラーの原因はわかりませんが、base64 エンコーディングと関係があると思います。私が言ったように、秘密鍵がOKを生成する場合とそうでない場合があります。
事前にご協力いただき、誠にありがとうございました。
android - Web Crypto API crypto.subtle が Apache Cordova で定義されていません
私は Cordova とforge ライブラリとブラウザのWeb Crypto APIを使用して署名とimportKey操作を実行しています。それにもかかわらず、Android デバイスの Web Crypto API はcrypto.getRandomValues()のみを提供し、SubtleCrypto は定義されていません (crypto.subtle)。したがって、Web Crypto API shrimとその依存関係であるPromizを追加すると、この参照の欠落が修正されると考えましたが、何も変わっていません。何かアイデアはありますか?
Chrome 52.0.2743.116 の PC でのデバッグは完全な Web Crypto API を提供しますが、Android 4.4.4 を搭載した Chrome バージョン 52.0.2743.98 を搭載した Android デバイスでは. Web API は crypto.getRandomValues() のみに制限されています。
私は基本的にHow to load a PKCS#12 Digital Certificate with Javascript WebCrypto APIからの回答を書き直しています
コード例:
index.html の内部
JavaScriptファイル内
safari - SubtleCrypto キーペアを Safari の永続ストレージに保存する方法
SubtleCrypto apiを使用して公開鍵と秘密鍵を作成しました。私はwebcrypto-shimを使用して、Safariで実装されていない微妙な方法のいくつかを克服しています。キーペアを生成し、それを使用してデータに署名できます。
次に、キーペアを IndexedDB に保存しようとしましたが、保存トランザクションが成功したようで、エラーはありません。しかし、署名のために公開鍵を再度使用したい場合は、まずIndexedDBから取得してから使用SubtleCrypto.exportKey()
しますが、エラーで失敗します
TypeError: 型エラー
私はSafariデスクトップ9.1.2で動作させようとしています.IndexedDBShimも使用しています.
保存が実際には機能せず、キーが IndexedDB に適切に保存されていないと思われます。保存トランザクションでは、キーをエクスポートせずに保存します。つまり、取得したオブジェクトを保存していますSubtleCrypto.generateKey()
。
もう 1 つのことは、同じコードが Chrome でも機能することです。