Microsoft MVP성태의 닷넷 이야기
openssl genrsa 2048시 키 생성이 다르게 됩니다. - 파일첨부 [링크 복사], [링크+제목 복사],
조회: 3424
글쓴 사람
김재영 (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)
5936ds4/26/2024992활성화 되어 있는 커뮤니티 발견하게 되어 기분이 좋습니다. 자주 놀러 올께요. (내용 없습니다. [1]
5935양승조 donator4/25/2024980Reflection 관련 질문 드립니다. [5]파일 다운로드1
5934양승조 donator4/24/2024753Reflection 관련 질문 드립니다. [1]
5933vict...4/23/2024749cpp 라이브러리 디버깅 방법 문의 드립니다. [1]
5932EK4/12/20241154다음 제네릭에서 널익셉션이 뜨는 이유를 알수있을까요? [1]
5931이대희4/2/20241366Windows 앱 SDK C# 템플릿의 용도가 무엇인지요? [1]
5930vict...2/22/20242126ef core, FromSqlRaw 맵핑 질문입니다. [4]
5929a2/17/20242159.Net 8 에서 디버거 변경 [1]
5928vict...2/5/20242547wpf에서 대량 데이터 보여주는 방법 추천 부탁드립니다. [1]
5926엄태영1/12/20242527잘못된 Task 사용으로 인한 데드락 관련 질문 입니다. [3]
5925Euni...12/22/20232311Visual Studio에서 nodejs 사용시 npm install -g @vue/cli 실행시 오류 [1]
5924Euni...12/21/20232375Visual Studio에서 nodejs 사용시 C:\Program Files\nodejs\\node.exe" "C:\Program Files\nodejs\\node_modules\npm\bin\npm-cli.js" prefix -g 를 찾지 못하는 설치 오류 [2]
5923정두호12/4/20232841MSSQL 데이터 전송과 공유폴더의 데이터 전송 차이점 [1]
5922Heeg...10/27/20235068C++의 double pointer를 C#에서 구현하는 방법이 잘 안됩니다. [3]
5921한예지 donator10/3/20234802마샬링 정의 및 목적이 궁금합니다. [5]
5920한예지 donator10/3/20233751C#과 WIN32 API 관계 질문드립니다. [4]
5919이건우9/27/20233322WinForm의 로딩속도 관련 질문입니다 [2]
5917한예지 donator9/14/20233405동기화 도구 질문 있습니다. [4]
5916한예지 donator9/3/20233551Thread.Sleep(500), await Task.Delay(500), Task.Delay(500) 차이점이 궁금합니다. [2]
5915한예지 donator8/30/20233438비동기 코드를 for 문 안에 작성한 경우 제어 변수가 올바르게 동작하지 않는 이유가 궁금합니다. [3]
5914한상욱8/11/20233339.net wpf에서 skiasharp 의 skelement 를 canvas로 사용 하고 있습니다. [1]
5913김태우8/10/20233400지역변수로 이해하는 메서드매개변수 게시글 댓글 [3]
5912guest4/25/20235943[참고 - 초보용] Sqlite 디비는 double이 없고 Real이 대신합니다 [3]
5911guest4/24/20233968Form1.cs와 외부 class.cs와 통신 (static async method포함) [4]파일 다운로드1
5910guest4/24/20233797Async 메서드와 try~catch [1]
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...