JavaScript
crypto-js

Crypto-jsでのbase64と16進数文字列の相互変換

More than 1 year has passed since last update.

Crypto-jsを使ってて忘れないようにするためのメモ

例えばAESでphraseをAESで暗号化したとき

var encrypted = CryptoJS.AES.encrypt( phrase , key , options );

encryptedには暗号化されたデータのオブジェクトが格納されている。このデータは

var encstr = String(encrypted);

とかしてやるとbase64でエンコードされた暗号化文字列が取得できる。

さて、このbase64を16進数に変換したい場合がある。Crypto-jsには適宜必要なデータへ変換するメソッドがいくつか用意されているらしい。

//base64 >>> hex
var hex = CryptoJS.enc.Base64.parse( encstr );
//hex >>> hexObject
var hxb = CryptoJS.enc.Hex.parse( hex );
//hexObject >>> base64
var bse = CryptoJS.enc.Base64.stringify( hxb );

注意点として、CryptoJS.enc.Base64.stringifyには「hxb」を渡さなければならない点。「hex」を渡すと元と違うbase64文字列が帰ってくる。何故かはわからない。

参考記事
https://hibara.org/blog/2016/02/15/cryptojs/