2

次のようなカスタム パスフレーズを使用して一部のデータを暗号化するために、 MSDNEncryptStringToBytes_Aesのメソッドを使用しています。

string original = "some data to encrypt";
byte[] encrypted;

using (AesManaged aes = new AesManaged())
{
    // Prepare new Key and IV.
    string passphrase = "somepassphrase";
    byte[] saltArray = Encoding.ASCII.GetBytes("somesalt"); 
    Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(passphrase, saltArray);
    aes.Key = rfcKey.GetBytes(aes.KeySize / 8);
    aes.IV = rfcKey.GetBytes(aes.BlockSize / 8);

    // Encrypt the string to an array of bytes. 
    encrypted = EncryptStringToBytes_Aes(original, aes.Key, aes.IV);

    // Decrypt the bytes to a string. 
    string roundtrip = DecryptStringFromBytes_Aes(encrypted, aes.Key, aes.IV);

    return Convert.ToBase64String(encrypted);
}

そしてそれは機能します(DecryptStringFromBytes_Aes元の文字列を返します)。

私の質問はencrypted、クライアント側にも同じパスフレーズがある場合、JavaScript を使用して復号化するにはどうすればよいですか? CryptoJSを使用して解読しようとしましたが、成功しませんでした。データはWebサービスで暗​​号化され、バイト配列、文字列としてJSに渡そうとしましたが、さまざまなエンコーディングでエンコードしようとしましたが、何をしても元の文字列を取得できませんでした。ここで何が間違っていますか?どうすればこれを機能させることができますか? このように実行可能ですか?saltArray エンコーディングまたはカスタム パスフレーズの使用が問題の原因になる可能性はありますか?

たとえば、私の JS 試行の 1 つ (base64 エンコーディングを使用) を次に示します。

var decoded = CryptoJS.enc.Base64.parse(encrypted);
var decrypted = CryptoJS.AES.decrypt(decoded, "somepassphrase");

(編集:後でランダムソルトを実装するつもりでした。他のすべてが機能したら、その方法で何が起こっているかを追跡する方が簡単です)

4

1 に答える 1

0

スタンフォードJavascript暗号ライブラリを使用してみてください。リンク:http ://crypto.stanford.edu/sjcl/

于 2012-12-30T22:28:13.473 に答える