1

私はObjective-C でRNCryptorをうまく使用してきましたが、今度は Javascript から iOS アプリのデータを暗号化する必要があります。しかし、この単純なテストは失敗します...

<script type="text/javascript" src="js/utils/sjcl.js"></script>
<script type="text/javascript" src="js/utils/rncryptor.js"></script>

function testEncodeEncrypt_RN(plaintext) {
    var secret = "rosebud";
    var encrypted = RNCryptor.Encrypt(secret, plaintext);
    var decrypted = RNCryptor.Decrypt(secret, encrypted);
    console.log("decrypted to " + decrypted);
}

...エラー「Uncaught CORRUPT: pkcs#5 パディングの破損」が sjcl.js によってスローされます。

さまざまなオプション オブジェクトを試しましたが、Encrypt と Decrypt の両方で機能するオプションはないと思います。入力文字列とシークレットを変更しても効果はありません。何か案は?

4

1 に答える 1

1
/*
  Takes password string and plaintext bitArray
  options:
    iv
    encryption_salt
    html_salt
  Returns ciphertext bitArray
*/
RNCryptor.Encrypt = function(password, plaintext, options) {

plaintextbitArray ですか? UTF-8 文字列を渡す場合は、 で変換する必要がありますsjcl.codec.utf8String.toBits。16 進および base64 エンコーディング用のコーデックもあります。SJCLドキュメントを参照してください。

SJCL の最新バージョンは、文字列を受け入れてそれらを bitArray に自動変換しますが、v4 形式の作業が完了するまで (2015 年末までに) JS 実装に触れることはないでしょう。プルリクエストを喜んで受け入れます。

RNCryptor-js は、他の実装 (ObjC 実装を含む) と完全に互換性がないことに注意してください。JavaScript は、v3 形式に必要な 10,000 回の PBKDF2 反復を処理するには遅すぎるため、デフォルトで 1,000 を使用します。つまり、反対側のコードを一致するように変更する必要があります (または 10,000 を使用するように JS を構成しますが、パスワードを処理するには 10 倍の時間がかかります)。.roundsで 2 つの構成設定を探しますRNCryptor.h

v4 形式の主な目標の 1 つは、反復回数を構成可能にして、JavaScript を相互運用できるようにすることです (残念ながら、暗号化のセキュリティを大幅に低下させてしまいますが、現在 JavaScript で処理できるのはそれだけです)。

于 2015-06-30T13:10:11.717 に答える