Encryption

Node.js で MySQL の AES_ENCRYPT 互換の暗号化

September 28, 2020
Misc
MySQL, Node.js, Encryption

MySQL の AES_ENCRYPT 関数 # https://dev.mysql.com/doc/refman/5.6/ja/encryption-functions.html#function_aes-encrypt key_str にプレーンテキストを指定する場合 # HEX 表現で以下の値が得られる。 mysql> SELECT HEX(AES_ENCRYPT('my_value', 'my_secret')); +-------------------------------------------+ | HEX(AES_ENCRYPT('my_value', 'my_secret')) | +-------------------------------------------+ | 6A6C5170A935FA5A70B8B1721EDAC3B7 | +-------------------------------------------+ 1 row in set (0.00 sec) Node.js で同様の結果を得るロジックは以下の通り。 const crypto = require('crypto'); function convertCryptKey(strKey) { let newKey = Buffer.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]); strKey = Buffer.from(strKey); for(let i=0; i < strKey.length; i++) newKey[i%16] ^= strKey[i]; return newKey; } const crypt_key = 'my_secret'; const c = crypto.createCipheriv("aes-128-ecb", convertCryptKey(crypt_key), ""); const b = c. ...