久しぶりの投稿になります。
この度、crypto-jsで暗号化したテキストを、PHPで復号しようとしています。
しかしfalse
がかってきてしまい、取得で来ていません。
crypto-jsでは↓のJsonで取得しています。
{"ct":"TbmXOUQaoxvjy2eDvQyLTw==","iv":"6dbf44da76d651253ccafb880fe4b152","s":"c153176590f0872b"}
また、コードは下記のように作成しました。
$encoded = 'TbmXOUQaoxvjy2eDvQyLTw=='; $key = 'c153176590f0872b'; $iv = '6dbf44da76d651253ccafb880fe4b152'; openssl_decrypt($encoded, 'AES-128-CBC', $key, 0, $iv);
上記のopenssl_decrypt
の結果取得したいテキストはpasspass
です。
ご教授いただけますと幸いです。
何卒よろしくお願いいたします。
crypto-js
Jsで行っていること
CryptoJS.AES.encrypt(plaintext, secret(), option).toString(); encrypt: function (cipher, message, key, cfg) { // Apply config defaults cfg = this.cfg.extend(cfg); // Encrypt var encryptor = cipher.createEncryptor(key, cfg); var ciphertext = encryptor.finalize(message); // Shortcut var cipherCfg = encryptor.cfg; // Create and return serializable cipher params return CipherParams.create({ ciphertext: ciphertext, key: key, iv: cipherCfg.iv, algorithm: cipher, mode: cipherCfg.mode, padding: cipherCfg.padding, blockSize: cipher.blockSize, formatter: cfg.format }); }
↑で暗号化を行っています。
optionの中身
const option = { format: { stringify(cipherParams) { // create json object with ciphertext const jsonObj = { ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64) }; // optionally add iv and salt if (cipherParams.iv) { jsonObj.iv = cipherParams.iv.toString(); } if (cipherParams.salt) { jsonObj.s = cipherParams.salt.toString(); } // stringify json object return JSON.stringify(jsonObj); }, parse(jsonStr) { // parse json string const jsonObj = JSON.parse(jsonStr); // extract ciphertext from json object, and create cipher params object const cipherParams = CryptoJS.lib.CipherParams.create({ ciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct) }); // optionally extract iv and salt if (jsonObj.iv) { cipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv) } if (jsonObj.s) { cipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s) } return cipherParams; } } };
block and paddingなどについて
padding : 2 unpadding : 1 blockSize : 4 mode : processBlock : 2 algorithm : keysize : 8