Microsoft MVP성태의 닷넷 이야기
openssl genrsa 2048시 키 생성이 다르게 됩니다. - 파일첨부 [링크 복사], [링크+제목 복사],
조회: 5540
글쓴 사람
김재영 (kjyoffice at gmail.com)
홈페이지
첨부 파일

안녕하세요
이전 질문에 대해 코멘트를 보고 샘플코드에 적용해봤습니다.

성태님의 의견처럼 아래의 코드로 수정해서 암호화는 되는걸 확인했지만 복호화는 실패하고 있습니다.

var ackp = (pr.ReadObject() as Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters);

뭔가 일반적으로는(?) 암호화 할때 썼던거 고대로 써서 복호화 해야하는거 같은데
다르게 오류가 뜨니 응?????? 거리고 있습니다.

- ConsoleApp1 : 성태님 코드 셋 + pem은 온라인 사이트에서 복사해옴 - 암호화/복호화 동작
- ConsoleApp2 : 성태님 코드 셋 + 수정부분 반영 + pem은 Hyper-V Ubuntu openssl에서 생성 - 암호화 동작 / 복호화 실패


어드바이스가 있다면 어드바이스 부탁드리겠습니다.
감사합니다.








[최초 등록일: ]
[최종 수정일: 2/5/2023]


비밀번호

댓글 작성자
 



2023-02-05 10시29분
[김재영] 쓰고보니 뭔가 이런거 같은데 틀릴지도 모르지만 일단 써봅니다.

성태님의 샘플코드에서 만들어진 키 PKCS#1 포맷에서는 PRIVATE 키 하나로 비밀키 공개키가 한꺼번에 나왔는데 (AsymmetricCipherKeyPair)

PKCS#8 포맷에서는 각각 키를 만들어야 한다

암호화 때는 openssl genrsa 2048로 만들어진 키 하나로만 되는게 아니라
이 키를 가지고 또 다른 명령어를 날려 공개키를 만들어서
암호화/복호화에 써야한다

맞는지는 잘 모르지만 써봅니다.

감사합니다.
[guest]
2023-02-06 09시59분
말씀하신 것이 맞습니다. 개인키로 암호화한 데이터를 복호화한다면 명시적으로 공개키로 읽혀야만 하도록 바뀐 것 같습니다. 그래서 첨부한 파일의 key.pem에서 공개키만 추출한 후,

openssl rsa -pubout -in key.pem -out pub_key.pem

"pub_key.pem" 파일을 대상으로 PemReader를 이용해 읽어내면,

var ackp = pr.ReadObject() as Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters;

이후, 복호화가 잘 됩니다. 사실, 현실적으로 봤을 때 암호화/복호화를 모두 개인키가 포함된 파일로 하는 경우는 없으므로 딱히 문제될 것은 없지만, 테스트하기가 약간 번거롭게 된 것 뿐입니다.

-------

만약 단순 예제를 위해서 key.pem 하나로 유지하고 싶다면 (또는 어차피 암/복호화라는 목적에 부합하므로) .NET BCL로 변환해 RSACryptoServiceProvider로 진행해도 됩니다.

RSAParameters rsaParameters = DotNetUtilities.ToRSAParameters(ackp); // ackp == RsaPrivateCrtKeyParameters 타입
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(rsaParameters);

string privateKeyText = rsa.ToXmlString(true);
string publicKeyText = rsa.ToXmlString(false);

--------

참고로, 왜 첨부 예제를 개인키로 암호화하고 공개키로 복호화하는 식으로 작성한 것인지 모르겠지만, 그 반대로 하셔야 합니다.

C# - PEM 파일을 이용한 RSA 개인키/공개키 설정 방법
; https://www.sysnet.pe.kr/2/0/13245
정성태
2023-02-06 10시13분
[김재영] 참고로, 왜 첨부 예제를 개인키로 암호화하고 공개키로 복호화하는 식으로 작성한 것인지 모르겠지만, 그 반대로 하셔야 합니다.

-> 암호화/복호화 동시에 안되니 서로 바꿔보고 왔다갔다 실행해보다가 여쭤본거라서 코드가 그랬네요 아하하하하하하
암호화때는 공개키, 복호화때는 비밀키!

다시 해보도록 하겠습니다.
감사합니다.
[guest]
2023-02-06 10시24분
[김재영] 비밀키로 개인키 만들어서 해보니 잘 됩니다.
감사합니다. +_+
[guest]

1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5848민성3/9/20235289도움 요청드립니다. [2]파일 다운로드1
5847guest3/7/20235894SQlike Like 구문 - 1시간째 인데 안되네요 [13]
5846Huuu...3/7/20235033웹 다운로드에 대한 고찰 [5]파일 다운로드1
5845guest3/7/20235138C# Split함수의 불친절함 [1]
5844까망이3/7/20235240c# 무료 디컴파일러는 어떤게 좋습니까? [1]
5843guest3/7/20235538판매 후 dll 등 에러 [5]
5842kr13/6/20235488publish 할 때 분석기 관련 dll 제외 [5]
5841guest3/3/20235532프로그램 판매 시 - Upgrade 버전 판매 [2]
5840joe3/2/20235672C# 클래스 라이브러리 수정 -> C++에서 참조시 함수 목록 갱신되지 않음. [4]파일 다운로드1
5839guest3/2/20236324윈도우 서비스 프로그램 - FORM 애플리케이션 감시서비스 [8]
5838랄랄라3/1/20235434event 사용 시 두 표현의 차이점이 있을까요? [1]
5837감사합니...2/28/20235677오라클 DB서버 접속관련 문의 드립니다.(Load Balancing, HA Events) [2]
5836박지범2/27/20235160static instance의 initialize 순서가 보장되나요? [6]
5835주민호2/25/20239313Windows Software Development Kit - 최신버전 1개 남기고 다 삭제하면 안되는지요? [10]파일 다운로드1
5834guest2/24/20235402Python IDE - 비주얼스튜디오 [3]
5833무지남2/23/20234832Async 메서드 그리고 나서 Bool 메서드 [5]
5832김지우2/21/20235247event와 delegate의 차이 , event를 써야하는 이유 [1]
5831이우람2/20/20235741ref 전역변수가 pinned가 될수 있나요? [2]
5830냉수마찰2/19/20235483C# GridView에 Column별 데이터 추가하는 방법에 대해 [1]
5829수박942/19/20235726키움 API를 윈폼과 WPF의 네임스페이스 없이 콘솔이나 WinUI3에서 사용할 수 있는 방법이 있나요? [2]파일 다운로드1
5828김재영2/19/20235980장기적으로는 this 구문을 안쓰는게 맞을까요? [2]
5827lee2/18/20236085파이썬 설치 오류 질문입니다 [1]
5826Syong2/14/20236237Socket 관련 Leak (OverlappedAsyncResult, OverlappedData) 관련 문의 [7]파일 다운로드1
5825박성원2/14/20236041Listview 컨트롤의 화면 전환 시 갱신 속도 [1]
5823검은콩2/13/20237139catch(Exception ex)의 line번호를 쉽게 알 수 없는지요? [7]
5822김지우2/11/20237585책을 보면서 sync, async 이해가 되지 않는 부분이 있습니다. [5]파일 다운로드2
1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...