반응형
//예제 샘플 : https://gist.github.com/vlucas/2bd40f62d20c1d49237a109d491974eb?permalink_comment_id=2981938
//샘플 변경 내용: const ENCRYPTION_KEY 대신 GetHashKey() 를 사용하여 OS 에 로그인 한 사용자 이름으로 Hash 코드 생성 후 필요한 길이 만큼만 사용하여 암호화/복호화에 사용
//////////////////////////////////////////////////////////////////////////////////////////////////
// string -> encrypt
// encrypted string -> decrypt
//////////////////////////////////////////////////////////////////////////////////////////////////
const crypto = require('crypto');
const os = require('os');
//(예제코드) const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY; // Must be 256 bits (32 characters)
const IV_LENGTH = 16; // For AES, this is always 16
module.exports = {
//암호화
encryptHandler : function(text)
{
let iv = crypto.randomBytes(IV_LENGTH);
//(예제코드) let cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(ENCRYPTION_KEY), iv);
let cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(GetHashKey()), iv);
let encrypted = cipher.update(text);
encrypted = Buffer.concat([encrypted, cipher.final()]);
return iv.toString('hex') + ':' + encrypted.toString('hex');
},
//복호화
decryptHandler : function(text)
{
let textParts = text.split(':');
let iv = Buffer.from(textParts.shift(), 'hex');
let encryptedText = Buffer.from(textParts.join(':'), 'hex');
//(예제코드) let decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(ENCRYPTION_KEY), iv);
let decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(GetHashKey()), iv);
let decrypted = decipher.update(encryptedText);
decrypted = Buffer.concat([decrypted, decipher.final()]);
return decrypted.toString();
}
}
//사용자 이름으로 Hash 값 발생
//발생 후 32 길이만 사용
function GetHashKey()
{
var result = crypto.createHash('sha256').update(os.userInfo().username).digest('hex');
result = result.substring(0, 32);
console.log("gethashkey -> hash = "+ result);
return result;
}
반응형
'초짜 IT보이 서바이벌 스토리' 카테고리의 다른 글
#Jenkins #Scheduler #Chrontab #Setting (0) | 2023.04.25 |
---|---|
#webapp works only with #war #packaging (0) | 2023.03.28 |
Spring? & Spring Framework Overview (0) | 2022.09.19 |
#electron #js #window #close (31) | 2022.01.04 |
#Windows10 #HDD #SDD #드라이브 #문자가 부팅 시 삭제 문제 해결 (31) | 2021.07.21 |