[완료]openssl을 가지구 윈도우에서 사용하는데 RSA 알고리즘 파일을 실행하면 에러가 떠요 ㅠ
안녕하세요
리눅스 서버에서 암호화 통신을 위해 RSA암호와, AES 암호를 병행해서 서버 클라이언트 통신을 마치고
윈도우에서도 똑같이 만들기 위해 하고 있습니다. DLL을 만들었었는데 어차피 리눅스에서나 윈도우에서나
제가 만든 함수와 openssl에서 제공하는 함수를 사용하기에 문제 될것이 없다!란 생각으로 만들었지만
여러 문제에 봉착했습니다.
우선 현재 RSA 알고리즘이 안됩니다. openssl에서 제공하는 함수를 사용만 하면 죽어버립니다.
블록암호화는 잘돌아 갑니다. 그래서 openssl이 잘못깔렸거나 하는 의심을 접었었습니다.
이상하게 리눅스에서는 libcrypto.a 라이브러리를 가져다 썻었는데
윈도우에서는 저라이브러리가 없고
libeay32.lib와 ssleay32.lib만 있더군요 그래서 이걸 project에서 setting에서 링크를 넣어주고 했을때 정상적으로 DLL도 만들어지고 블록암호화는 잘돌아 갑니다.
그런데 RSA에서 PEM_read_PprivateKey를 사용하면 죽어 버리더라구요
OPENSSL_Uplink(100F2010,07): no OPENSSL_Applink
이런에러가 뜨면서 죽었습니다.
어떤분이 applink.c 파일을 같이 프로젝트에 추가하고 컴파일 하면 될것이란 말이 있어서 했더니
이번에는 팝업창이 뜨면서
Program : C:\C\client\debug\client.exe
file : dbghep.c
line : 1011
Expression : +CrtlsValidHeapPointer(pUserData)
For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts
(Press Retry to debug the application)
이런 화면이 나옵니다.
도저히 원인을 모르겠어서 리눅스에 있던 demos 폴더에 sign이나 mkcert 등에 파일을 긁어 와서
그대로 실행을 해봤지만 똑같이 에러를 발생시키고 죽습니다.
어차피 AES나 RSA모두 제가 demos 폴더에 있는 파일을 응용,편집해서 사용을 했 는데 왜 RSA가 안될까요
그대로 가져와도 안되는건 환경탓이지 않을까요?
이상하게 윈도우에서는 openssl이 조금만 깔려있더라구요 libcrypto.a도 없구 libeay32.lib, ssleay32.lib
system32 폴더에는 libeay32.dll, ssleay32.dll 이렇게..
openssl을 다시 깔아봤는데도 이번엔 소스파일과 여러가지 많은데 윈도우에서는 뭘써야할지 모르겠더라구요.ㅠ
답변좀 주세요 제가 뭐가 문제일까요 ㅠㅠ
언제 부터인가 ms
언제 부터인가 ms 플랫폼에서는 소스에 다음처럼 추가를 해줘야 합니다.
" 대신 꺽새를 써도 됩니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
ㅠㅠ
그방법을 해보았지만 여전히 같은 반응이 나오고 있네요.
다른 파일을 테스트할때는 가능한데요
그러니까 하나의 파일에 함수가 그 헤더파일을 필요로 할때는 가능한데
그 파일을 DLL 로 만들어서 DLL 내부에 #include 를 선언했을때는
여전히 에러가 나오네요...
그 DLL을 사용하는 클라이언트 파일이 #include 을 선언안하면 실행시
AOPENSSL_Uplink(100F2010,07): no OPENSSL_Applink 이메세지를 띄우고요
그 DLL을 사용하는 클라이언트 파일이 #include 을 선언하면
팝업창이 뜨면서
Program : C:\C\client\debug\client.exe
file : dbghep.c
line : 1011
Expression : +CrtlsValidHeapPointer(pUserData)
For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts
(Press Retry to debug the application)
라고 나오네요
흠! 그냥 한파일로 만드는 거랑 DLL로 만드는거랑 어떤차이길래 이렇게 안되는지 이해가 잘안되네요
말씀한 기능은 직접
말씀한 기능은 직접 사용해보지 못한 부분이라, 자세한 얘기는 할 수 없네요.
대신, 이미 알고있겠지만 외부 Lib를 사용하는 MS Windows App 개발시 체크 사항을 적어봅니다.
1.dynamic linking library로 사용할지, static linking library로 사용할지에 따라서 라이브러리 빌드를 다르게 해야합니다.
2.개발중인 project 빌드모드 확인후, Library 도 용도에 맞게(debug/release) 빌드해서 사용하는게 맞겠죠. (debug 빌드에는 debug 빌드 library, release 빌드에는 release 빌드 library를 사용해야겠죠)
3.개발중인 project가 MultiThread/SingleThread 지원 여부에 따라 Library 빌드때 빌드 옵션이 달라져야 할 거구요.
=================================
나비아빠
=================================
나비아빠
답변감사합니다.
현재 debug 빌드이고
개발중인 프로젝트는 single Thread 지원 입니다. 빌드 옵션은 맞게 설정이 되어 있는듯 합니다.
아직 원인은 못찾았지만요
위에 답변을 주신 모든분들 감사합니다 (_ _) 문제 해결을 하는 날까지~노력 해야 겠네요 원인이 몰까...
댓글 달기