PBKDF2ではなくSHA256で CryptoJS のAES暗合復号

Java と JavaScript 間の AES暗合 - Oboe吹きプログラマの黙示録
に書いたように、PBKDF2WithHmacSHA1 で実行する AES暗合も一計ですが、
単純に、SHA-256 ハッシュ&初期ベクトルを単純にハッシュ値から持ってくる方法も、
CryptoJS で書こうと思えば書けます。
Java の以下のキーの生成に対応した CryptoJS の方法を考えます。

private SecretKeySpec key;
private IvParameterSpec iv;
byte[] keydata = password.getBytes();
MessageDigest sha = MessageDigest.getInstance("SHA-256");
keydata = sha.digest(keydata);
keydata = Arrays.copyOf(keydata, 32);
key = new SecretKeySpec(keydata, "AES");
iv = new IvParameterSpec(Arrays.copyOf(key.getEncoded(), 16));

これに対応する JavaScript のコードを書けば良いわけです。
code.google.com
からは、以下を使います。
sha256.js
aes.js

テキスト入力パスワード→ SHA256

var passwd = $('#planetext').val();
var key = CryptoJS.SHA256(passwd);

SHA256キー→16bute の Hex表現

var ivhex = CryptoJS.enc.Hex.stringify(key).substring(0, 32);

平文 planetext,→ 暗合化

var encrypted = CryptoJS.AES.encrypt(planetext, key,
  { iv: CryptoJS.enc.Hex.parse(ivhex),
    mode: CryptoJS.mode.CBC,
    keySize: 256 / 32,
    padding: CryptoJS.pad.Pkcs7
});

暗合文 encrypted,→ 復号 message

var decrypted = CryptoJS.AES.decrypt(encrypted, key,
  { iv: CryptoJS.enc.Hex.parse(ivhex),
    mode: CryptoJS.mode.CBC,
    keySize: 256 / 32,
    padding: CryptoJS.pad.Pkcs7 
});
var message_code = hexStrToURICode(decrypted);
var message = decodeURIComponent(message_code);

CryptoJS の機能で、覚えておくと便利そうなメソッド

var key256base64 = CryptoJS.SHA256(key).toString(CryptoJS.enc.Base64);

→ key の SHA256 を求めて Base64エンコードした文字列を取得します。

続けて、CryptoJS.enc.Hex.stringify で、CryptoJS.SHA256の結果を渡せば、
CryptoJS.SHA256 は、byte配列を返すものを 16進数で文字列として読み込むことで同じ結果になります。

var  k = CryptoJS.enc.Hex.stringify( CryptoJS.SHA256(key) );

→ CryptoJS.enc.Hex.stringify で、16進→文字列、
→ CryptoJS.enc.Hex.parseで、16進文字列→byte array