NodeJS로 암호화 하는데,
서버에서 공개키 보내고,
클라이언트에서 공개키로 암호화 해서 서버로 돌려주고,
서버에서 다시 개인키로 복호화해서 확인하려고 하는데,
간단해보이는게 드럽게 안된다 진짜. ㅠㅠ
서버 : https://github.com/rzcoder/node-rsa
클라 : https://github.com/travist/jsencrypt
이거 이용해서 하는데,
졸라 웃기는게 지들끼리 단독으로 하는건 잘됨.(이건 당연한거지만)
서버에서 암호화하고 풀고
클라에서 암호화하고 풀고...
근데 위에서 얘기한건 계속 오류남.
그래서 테스트 더 해봤는데,
서버에서 공개키,개인키 만들고,
양쪽에 걍 다 뿌리고,
클라에서 서버에서 받은 공개키랑 개인키로 암호화하고 복호화하는거 잘됨.
근데 클라에서 암호화string 보낸걸 서버에서 복호화를 여전히 못함.
서버에서 암호화한 것도 클라이언트에서 복호화를 못함.
대체 뭐가 문제일까? ㅠㅠ
죄다 베이스는
http://www-cs-students.stanford.edu/~tjw/jsbn/
이거라면서 다 달라. ㅠㅠ
뭐가 문제인지 냄세가 난다. 인코딩 또는 캐릭터 사이즈가 다르다던가 ... 마치 C와 JAVA 프로그램 사이에서 암호화 된 것 디코딩/인코딩 할때 생겼던 문제처럼 보인다. 그 경우는 캐릭터의 바이트수의 차이 때문이었지만.
jsencrypt면 노드에서 ursa 모듈로 RSA_PKCS1_PADDING 쓰렴
1. 서버에서 공개키를 갖고 평문 x를 암호화한 x\'를 얻어낸다. 이걸 서버에서 복호화해서 x가 나오는 것을 확인함. 2. 암호문 x\'를 복사해서 클라이언트 form안에 input type hidden으로 넣은 후 서버로 전송하고 서버에서 개인키로 복호화해서 x가 나오는 것을 확인함.
3. 이제 클라이언트쪽에서 서버가 보낸 공개키를 갖고 평문x를 암호화한 x\'\'를 얻어낸다. 4. 서버는 x\'과 x\'\'이 일치하는지 확인한다. 일치하지 않는다면 클라이언트쪽의 암호화 방식이 서버쪽의 복호화 방식과 맞지 않는 것.
ㄴ 그냥 jsencrypt에서 쓰는 암호화 방식이 옛날거라서 그래. 요즘꺼는 pkcs1_oaep 쓰는데 jsencrypt는 pkcs1 씀
ㅁㅁ// 오~ ㄳㄳ 횽 댓글보고 encryptionScheme:'pkcs1' 로 줬더니 그제서야 됨. ㅠㅠ
근데 서버에서는 ursa든 뭐든 이거저거 해주는거 많은데, 클라이언트에서 public key로 암호화해줘야되는데 뭘 넣어야되는지 도통 못 찾겠더라고. 클라이언트에서 pkcs1_oaep 해주는거 없나요? 그러면 더 안전해지고 좋을듯한데. ㅠㅠ 일단 이대로도 사용은 가능하겠는데, 이왕이면 다홍치마라고, 좀 더 좋은거 쓰고 싶은데. ㅠㅠ
나도 꼬라지 보고 전화기횽처럼 생각해서 그거만 살피고 있다가 도저히 이건 아닌거 같다 싶어서, 답이 안보여 푸념삼아 질문올려본건데, 답이 나올줄은 몰랐네. 다들 ㄳㄳ
찾다찾다 하도 안나오니 빡쳐서 걍 직접 만듬. 재료(?)는 다 있겠다, 알맞은 위치에 복붙하니까 끝난다. 헤헤.