問題タブ [jsbn]

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.

0 投票する
2 に答える
997 参照

javascript - SJCL と Java Bouncy Castle RSA 間の暗号化の互換性

私は RSA 暗号化を使用して Android アプリケーションに取り組んでいます。

サーバー、秘密鍵、友人の公開鍵から取得できます。

秘密鍵は次のようになります。

このキーを使用して、サーバーから受信し、JavaScript ライブラリ (SJCL) によって既に暗号化されているメッセージを復号化する必要があります。また、javascrypt ライブラリを使用してメッセージを復号化できるようにするには、メッセージを暗号化する必要があります。

今のところ、私はこれを行いました:

今、私はこれを取得します:

javax.crypto.IllegalBlockSizeException: 入力は 96 バイト未満でなければなりません

0 投票する
1 に答える
1310 参照

javascript - JSBN を使用した Javascript RSA キー生成用の N と E の選択

http://www-cs-students.stanford.edu/~tjw/jsbn/にある JSBN ライブラリを使用しています。私は特に、次のように rsa.js で RSASetPublic() 呼び出しを作成しようとしています。

たとえば、N = "667" および E = "327" の場合、"Message too long for RSA" というアラートが表示されます。

機能は

他の関数を呼び出す...

そして BigInteger fromString() 関数は...

そして、生成されたキーを RSAEncrypt(text) などで使用するには、テキストがパディングされて暗号化されるときに n が重要です...

そこで、さまざまな情報源から次のアドバイスを集めました。

  • N は法であり、長さが k ビットを超えない 2 つの素数 (N=pq) の積です。
  • p と q は 2 つの大きな素数ですか?
  • N はキーサイズを指定するために使用されます
  • 一般的なビット長は、k = 1024、2048、3072、4096、...
  • {2,4,8,16,32,256} から parseBigInt の 2 番目の引数を選択します
  • e は公開指数であり、(p-1)(q-1) よりも小さく互いに素である数値です。
  • {3、5、17、257、65537} から e の値を選択します

http://asecuritysite.com/encryption/rsaのようなサイトは、アルゴリズムの高レベルの理解に役立ちますが、彼が特定のパラメーター割り当てにどのように変換されるか、または N と E (対 n と e) が明示的にどのように変換されるかはまだわかりません平均。では、N と E は何であるべきでしょうか? メッセージが「RSA には長すぎない」ように選択するにはどうすればよいですか?

0 投票する
2 に答える
2298 参照

javascript - JS と Python 間の RSA 暗号化と復号化 (pycrypto)

JS RSA ライブラリ ( http://www-cs-students.stanford.edu/~tjw/jsbn/ ) からプレーン テキストを暗号化し、Python の Crypto.PublicKey から復号化します。

しかし、python で JS から暗号化テキストを復号化すると、ダミー テキストが含まれます。なぜそうなのかわかりません。

だから、ダミーのない平文が欲しい(ex. test)

ステップ

  1. Python でキー ペアを作成します。

    /li>
  2. モジュラス、指数をJSに保存し、「テスト」を暗号化します

    result(hex string): d0ab7e22f92adcca7182e3c622b513382d163033df5ca0f3c0327e8a1774258800ae57dfc98522f5ed40a4bed2f4b54f46ea800ff1ef522b104b0f874a598f6bbcf5453506f8bf2f8aa3b04b0c73f0018564707304b3a059326d51945d3ff0282d63c2c4c1ea6ba5a2172af83ef8bdc1d104a8d67ba95ee97ab89b36cd5c34d4

  3. Python で PrivateKey を使用して復号化する

    結果: \x02\xf0\xae\xafK\xd3\x17\xfc\xf4\xd6\xd9=\xee7\x04\x94\xea\x9c\xd8\xf7--\x19\x05$!'#\xad\ x82'\xfcKG\xadK\xb6_\xabMZ:\x9dU\xa4\xc0[\x8c\xa6hC\x93\xf7\xbc\xf1:\x9f\x107D\xe8\xfe\x07R\x8c\xd7\xb3\xe6\ xc6\xcf^\x92\xa2\xe2X\xe4\xaf|\x8aS\xfe\xd3\x84)\xc3\x82\xdc\xd1\x7f\xc9\x12\xd0\x94\xd2jS\xee\x83\xfda \xc6\xc7d\xdd\x0b2\xe6\x1d\x84\x0c\x93\x8aK\xc2\x10U\xc0Y~\xbf\x15\xfa\x00テスト

0 投票する
1 に答える
256 参照

javascript - 負の BigInteger (Tom Wu の JSBN ライブラリ) 値を 16 進数値に変換する

今後の HMAC 計算に使用できるように、BigInteger 数値を 16 進形式に変換しようとしています。これを行うためのコードを取得するために、次の投稿を使用しました。

CryptoJS を使用して 64 ビット数値文字列を単語配列に変換する

このコードは正の BigInteger Number に対しては問題なく動作しますが、負の BigInteger Number に対して使用すると正しい結果が得られません。

例:リンクされた投稿から以下のコードを考えてみましょう:

num値を-52として、lengthInBytes値を8として渡しました。生成されるhexNum (intToWords 関数の 3 行目) は"-34"です ( "ffffffffffffffcc"ではなく)

誰かが入力数値を正しい16進形式に正しく変換するのを手伝ってくれませんか?

0 投票する
1 に答える
1296 参照

javascript - JavaScript の RSA は ASCII/バイト配列をサポートしなくなりました

http://www-cs-students.stanford.edu/~tjw/jsbn/のrsa.js v1.0 を使用して、ブラウザーで ASCII 文字列を暗号化しています。文字列は、実際には倍長の TripleDes キーを含む 16 バイトの配列です。RSA v1.0 ではこれが機能します。バイト配列は、(Bouncy Castle または Thales HSM を使用して) サーバー上で 16 バイト配列として正しく復号化されます。

例えば

rsa.js v1.4 を移動すると、これは機能しなくなります。Bouncy Castle はデータを復号化しますが、16 バイト配列ではなく、25 バイト配列になりました。

rsa.js ライブラリで確認できる主な違いは、v1.1 リリース ノートにあります。

JavaScript 文字列の PKCS1 エンコードおよびデコード時の非 ASCII 文字の utf-8 エンコードのサポートが追加されました。

v1.0 の PKCS#1 パディングは次のとおりです。

v1.1 以降の PKCS#1 パディング機能は次のとおりです。

rsa.js v1.0 では、各文字を 1 バイト文字として扱いました。v1.1 以降の文字は、マルチバイト utf-8 かどうかを確認するためにテストされています。

私の唯一のオプションは次のいずれかのようです:

  1. rsa.js v1.0 に固執する
  2. utf-8 文字検出を無効にできる rsa.js (および rsa2.js) の修正バージョンを作成します。
  3. (編集済み) PKCS#1 v2 (oaep) をサポートする defensivejs.com を使用するようにコードを変更します。

アイデア?