21.09.05 RSA [작성 중!]

21.09.05 RSA [작성 중!]

RSA를 Javascript로 구현해보았다.

1. p, q 아주 큰 소수

2. n = p*q

3. φ(n) 오일러 피 함수(n 과 서로소인 1부터 n까지 정수의 개수)

4. φ(n) 값을 (p-1)(q-1)을 통해 구한 후, 1

>>구현 중!

5. (e*d) mod(φ(n)) = 1 만족하는 d 구하기

/** * 21.09.05 JE * RSA 구현 * 1. p, q 아주 큰 소수 * 2. n = p*q * 3. φ(n) 오일러 피 함수(n 과 서로소인 1부터 n까지 정수의 개수) * 4. φ(n) 값을 (p-1)(q-1)을 통해 구한 후, 1 < e < φ(n)인 e 구하기 * 5. (e*d) mod(φ(n)) = 1 만족하는 d 구하기 */ //1 ~ 256 까지의 소수 //+ 소수 분류하는 함수로 추가하기! const primeNum = [2, 3, 5, 7, 9, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 149, 151, 157, 163, 173, 179, 181, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251]; //변수 초기화 //다중 반환값을 구하기 위해 객체로 설정하였다. let num = { p : 0, q : 0 } let index_p, index_q = 0; let ep = 0; let pubKey = { n : 0, e : 0 } let privKey = { n : 0, d : 0 } //primeNum 배열에서 서로 다른 p, q 뽑기 let pqGen = () => { index_p = Math.floor(Math.random()*primeNum.length); index_q = Math.floor(Math.random()*primeNum.length); if(index_p != index_q){ num.p = primeNum[index_p]; num.q = primeNum[index_q]; console.log('p', num.p, 'q', num.q); } return num } //n 생성 let numGen = () => { pqGen(); n = num.p * num.q; console.log('n', n); return n } //Euler's phi let eulerPhi = () => { pqGen(); ep = (num.p - 1)*(num.q - 1); console.log('ep', ep); return ep } //e 생성 ep보다 작으면서 ep와 서로소 관계인 임의의 정수 //서로소: 공약수가 1 밖에 없는 관계 let pubGen = () => { eulerPhi(); let dum = 0; // while(pubKey.e != 0){ // dum = Math.floor(Math.random()*ep + 1); // if() // } } //서로소 확인하는 함수 let coprime = (a, b) => { let gcd = 1; for(let i = 0; ) }

from http://jemerald.tistory.com/66 by ccl(A) rewrite - 2021-09-06 04:01:03