전체 글 312

nodemailer를 이용한 mail보내기

EmailJs 처음에는 EmailJs로 메일을 보내려고 하였다 메일 전송에는 성공하였으나 무료회원은 한달 200개의 횟수제한, 토큰을 3개나 받아오며 보내는 절차가 복잡하기에 별다른 제약없는 nodemailer로 갈아탔다 nodemailer 우선 설치한다 npm install nodemailer 그리고 예제대로 코딩을해서 실행을 시켜보면 const nodemailer = require("nodemailer"); async function main() { let testAccount = await nodemailer.createTestAccount(); let transporter = nodemailer.createTransport({ host: "smtp.ethereal.email", port: 587,..

리펙토링 및 개선 - 5 / 카이사르, 모노알파베틱 암호화 적용

한것 카이사르 암호화와 모노 알파베틱 암호화를 RSA와 함께 적용했다 (회원가입, 로그인, 비밀번호 변경) 내가 쓴 카이사르와 모노알파베틱 암호화 카이사르 암호(Caesar cipher) 카이사르 암호란 각 글자를 n만큼 shift시킨 간단한 치환암호 예 : 'abz'를 +1만큼 shift -> 'bca' 코드화 문자열의 각 문자를 유니코드화 -> 각 유니코드에 원하는 shift만큼 더해줌 -> 이 때 'z' 다음에는 ' fullfish.tistory.com 모노 알파베틱 암호화 (Monoalphabetic Cipher) 앞선 카이사르 암호화와 마찬가지로 치환암호 26자의 알파벳을 각기 다른 알파벳으로 치환시킴 코드화 알파벳이 오름차순된 ('abcd...') 문자열과 랜덤으로 뒤섞인 문자열을 준비해서 각..

모노 알파베틱 암호화 (Monoalphabetic Cipher)

앞선 카이사르 암호화와 마찬가지로 치환암호 26자의 알파벳을 각기 다른 알파벳으로 치환시킴 코드화 알파벳이 오름차순된 ('abcd...') 문자열과 랜덤으로 뒤섞인 문자열을 준비해서 각 알파벳의 index를 참고하여 치환한다 function encrypt(str) { let resultArr = []; for (let i = 0; i < str.length; i++) { if (/[a-z]/.test(str[i])) resultArr.push(lowerMonoAlphabet[lowerAlphabet.indexOf(str[i])]); else if (/[A-Z]/.test(str[i])) resultArr.push(upperMonoAlphabet[upperAlphabet.indexOf(str[i])]); ..

카이사르 암호(Caesar cipher)

카이사르 암호란 각 글자를 n만큼 shift시킨 간단한 치환암호 예 : 'abz'를 +1만큼 shift -> 'bca' 코드화 문자열의 각 문자를 유니코드화 -> 각 유니코드에 원하는 shift만큼 더해줌 -> 이 때 'z' 다음에는 'a'가 와야하므로 'z'의 유니코드를 넘어서면 알파벳의 갯수인 26을 빼줌 -> 대문자도 고려해줌 -> 유니코드를 다시 알파벳으로 변환 -> 복호화는 반대로 하면 됨 function encrypt(str) { let resultArr = []; let unicodeArr = []; for (let i = 0; i < str.length; i++) { const unicode = str[i].charCodeAt(0); if (str[i] !== " ") { if ( (uni..

환경변수 사용법 (react, webpack, aws)

일반적으로 환경변수는 .env파일에 선언한것을 process.env.환경변수이름으로 불러와서 사용한다 node.js 환경 dotenv 라이브러리는 node.js환경에서 .env파일을 읽어오는것. react환경 기본적으로 처리가 되어있어서 따로 라이브러리 불러올 필요는 없지만 변수이름 앞에 REACT_APP_을 꼭 붙여줘야함 webpack으로 구성한 react환경 dotenv-webpack 라이브러리 필요 (REACT_APP_을 안붙여줘도됨) (아래 블로그가 설명이 잘 되어 있다) [React] Webpack으로 구축한 React 프로젝트에서 환경 변수(.env) 사용하기 TL;DR Webpack을 통해 직접 구성한 리액트 프로젝트 .env 파일에 환경 변수를 선언할 때 REACT_APP_ 으로 시작하지 ..

리펙토링 및 개선 - 4 / RSA 적용

클라이언트단에서 서버단으로 정보보낼 때 중간에 password 탈취에 대응하기위해 RSA를 적용해서 password 암호화를 해주었다 RSA에 대해 내가 쓴 글 RSA RSA란? 현재 SSL/TLS에 가장 많이 사용되는 공개키 암호화 알고리즘 전세계 대부분의 인터넷 뱅킹에서 사용 대칭키가 아닌 공개키와 개인키가 한 쌍을 이룸 공개키로 암호화한 내용은 개인키로만 fullfish.tistory.com 회원가입 흐름 클라이언트에서 email과 nickname 그리고 createKey: true(키 생성위해)를 보냄 서버에서 이메일 중복확인 중복이면 중복 에러 중복아니면 키를 생성 서버에서 첫 요청시와 그 다음 요청시에 값을 다 입력했는지 검증 db에 d,e,N저장 (email과 nickname ,d , e, ..

RSA

RSA란? 현재 SSL/TLS에 가장 많이 사용되는 공개키 암호화 알고리즘 전세계 대부분의 인터넷 뱅킹에서 사용 대칭키가 아닌 공개키와 개인키가 한 쌍을 이룸 공개키로 암호화한 내용은 개인키로만 복호화가능 (일반적으로 민감만 정보 보호하려고 사용) 개인키로 암호화한 내용은 공개키로만 복호화가능 (공인인증서처럼 본인을 인증하는 용도로 사용) 공개키와 개인키를 만드는 과정 1. 두 소수 p와 q를 만든다 2. p-1, q-1과 각각 서로소인 정수 e를 준비한다. 3. ed를 (p-1)(q-1)로 나눴을때 나머지가 1인 d를 찾는다. ((p-1)(q-1)과 e가 서로소가 아니면 만족하는 d가 없음 그래서 2번과정 필요) 4. N = pd (N은 평문인 a보다 커야한다), N과 e는 공개키, d는 개인키 5. ..

openssl 설치 및 키 발급

openssl 이란 SSL과 TLS프로토콜의 개방형 소스구현 openssl을 이용하여 자체적으로 키를 생성할 수 있다. openssl 설치 brew update // 홈브루 최신상태 업데이트 brew search openssl // openssl 검색 brew install openssl1@1.1 // openssl 설치 터미널에서 openssl을 입력하면 접속됨 키 발급 개인키 만들기 openssl에 들어간후 genrsa -aes256 -out rootca_private.key 2048 // 암호화 하지 않으려면 -aes256빼고 만들면 됨 개인키로 공개키 만들기 openssl에 들어간후 rsa -in rootca_private.key -out rootca_public_key.pem -pubout op..

JSencrypt 라이브러리를 이용한 암호화, 복호화

JSencrypt 라이브러리는 RSA 방식으로 데이터를 암/복호화한다 RSA 방식 이란 RSA RSA란? 현재 SSL/TLS에 가장 많이 사용되는 공개키 암호화 알고리즘 전세계 대부분의 인터넷 뱅킹에서 사용 대칭키가 아닌 공개키와 개인키가 한 쌍을 이룸 공개키로 암호화한 내용은 개인키로만 fullfish.tistory.com JSencrypt 라이브러리 다운 주소 JSEncrypt Introduction When browsing the internet looking for a good solution to RSA Javascript encryption, there is a whole slew of libraries that basically take the fantastic work done by Tom..