Sails.js Tutorial : 개인정보 양방향암호화(AES256) 하기
- 이 예제에는 개인정보 데이터가 없긴 하지만, 별명(Nick)을 개인정보라 간주하고 암호화를 진행해보겠습니다.
xyz/api/services/EncryptionService.js
파일을 생성한다.const crypto = require('crypto'); const SECRET_KEY = '중요한키'; module.exports = { encrypt: function (data) { var cipher = crypto.createCipher('aes256', SECRET_KEY); // Cipher 객체 생성 cipher.update(data, 'utf8', 'base64'); // 인코딩 방식에 따라 암호화 var result = cipher.final('base64'); // 암호화된 결과 값 return result; }, decrypt: function (data) { var decipher = crypto.createDecipher('aes256', SECRET_KEY); // Decipher 객체 생성 decipher.update(data, 'base64', 'utf8'); // 인코딩 방식에 따라 복호화 var result = decipher.final('utf8'); return result; }, };
xyz/api/models/Admin.js
에 다음처럼 수정한다.// Admin.js const crypto = require('crypto'); module.exports = { tableName: 'tb_admin', attributes: { userid: { type: 'string', unique: true }, password: { type: 'string', required: true }, nick: { type: 'string', unique: true }, getNick: function (){ return EncryptionService.decrypt(this.nick); }, }, autoUpdatedAt: false, autoCreatedAt: false, beforeCreate: function (values, cb) { if (values.password != undefined) { values.password = crypto.createHash('sha256').update(values.password).digest('base64'); } if (values.nick != undefined) { values.nick = EncryptionService.encrypt(values.nick); } console.log(values); // 관리자 추가시 확인용 cb(); }, beforeUpdate: function (values, cb) { if (values.password != undefined) { values.password = crypto.createHash('sha256').update(values.password).digest('base64'); } if (values.nick != undefined) { values.nick = EncryptionService.encrypt(values.nick); } console.log(values); // 비밀번호 변경시 확인용 cb(); }, }
xyz/views/mgmt/admin/index.ejs
와xyz/views/mgmt/admin/update_form.ejs
에서admin.nick
으로 표시된 부분을admin.getNick()
으로 변경합니다.
- DB의 내용을 모두 삭제한 후에, 관리자를 추가해봅니다. 그리고, DB에서 Nick 이 암호화되어 있는지도 봅시다.
... null { userid: 'userid5', password: 'DurIFxdo0M3vOiD+5ttDYtAZyR4QZiprVRhjNuGkJ3g=', nick: 'j7m+XXpovYiYPWRHmuRZ8Q==', id: 240 } { nick: 'v2bcacVv58tBYHRSlgpWBA==' } [ { userid: 'userid1', password: '5sPaWyBmNNfz81htdH/9s2tcZ1dXs4DGpf5cVwxxQ0k=', nick: 'v2bcacVv58tBYHRSlgpWBA==', id: 236 } ] ...
제대로 암호화되어서 무슨 내용인지 알아볼 수 없네요. ^^;
댓글
댓글 쓰기