Microsoft MVP성태의 닷넷 이야기
글쓴 사람
우라미윰 (herestayme0401 at nate.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)

우선 저희쪽 상황을 보자면 우리(A) 상대 (b)

A라는 업체쪽에 xml문서로 보내고 리턴값을 요청을 하면 B라는 업체가 그것을 받아 들여 결과값을 리턴하는 형식으로 진행을 하고 있습니다.

그런데 어느날 중요한 값들은 보안 문제 때문에 암호화 하라는 것입니다.

일단 저희는 c#으로 구현을 해야하는 상황이고 그쪽은 java로 구현을 마친 상태입니다.

우선 보낼 값 values1, values2, values3 이 있다고 하면 이값들은 RijndaelManaged rijndkey = new RijndaelManaged(); 를 이용하여 대칭키를 생성하고 암호화 작업을 거칩니다.
이게 1차 작업입니다. 여기까지는 A와 B의 대칭 알고리즘으로 암복호화가 잘 이루어 집니다.

헌데 대칭키를 values4 값에 B업체가 제공한 공개키값으로 암호화를 해서 보내야 한다는 점입니다.

B는 개인키를 이용하여 values4값을 복호화 하고 복호화 하게 대면 대칭키를 알게 될것이고 그키값으로 values1, values2, values3 을 복호화 하는 작업을 하는 것이지요.


---------------------B업체의 JAVA암호화 소스 -------------------------

//공개키 파일로부터 byte[] 추출.
File publicKeyFile = new File(“MATI의 공개키가 저장 된 파일경로");
FileInputStream fis = new FileInputStream(publicKeyFile);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int theByte = 0;
while((theByte = fis.read()) != -1){
baos.write(theByte);
}
fis.close();
byte[] publicKeyBytes = baos.toByteArray();
baos.close();

//공개키 생성.
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);

//RSA 암호화 사이퍼 생성.
Cipher rsaCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
rsaCipher.init(Cipher.ENCRYPT_MODE, publicKey);

//MATI 의 공개키로 세션키(대칭키) 암호화 수행. ---- rijndaelKey = 세션키
byte[] encryptedSessionKeyBytes = rsaCipher doFinal(rijndaelKey getEncoded());

---------------------A업체의 C# 암호화 소스 -------------------------
               
                //공개키 파일로 부터 byte[] 추출
    1 string filepath = "D:\\MatiPublicKey.key"; //b업체가 준 공개키 정보가 들어있는 키파일입니다.
                         
    2 FileStream fsSource = new FileStream(filepath, FileMode.Open, FileAccess.Read);
    3 int size = (int)fsSource.Length;
    4 byte[] bytes = new byte[size];
    5 size = fsSource.Read(bytes, 0, size);
    6 byte[] Exponent = { 1, 0, 1 };
    7 string nknk = Convert.ToBase64String(bytes);
    8 byte[] from64key = Convert.FromBase64String(nknk);

    9 //x509 인증서생성하여 공개키를 객체화 시킨다.
    10 X509Certificate2 x509 = new X509Certificate2(from64key);
    11 RSA rsa = (RSA)x509.Publickey;
                       
    12 ////공개키 파라미터 적용
    13 RSAParameters RSAKeyInfo = rsa.ExportParameters(false);
    14 RSAKeyInfo.Modulus = RSAKeyInfo.Modulus;
    15 RSAKeyInfo.Exponent = RSAKeyInfo.Exponent;
                

    16 //공개키 알고리즘 생성
    17 RSACryptoServiceProvider oEnc = new RSACryptoServiceProvider();
    18 oEnc.ImportParameters(RSAKeyInfo);
               
    19 //암호화
    20 byte[] inbuf = Convert.FromBase64String(_deakey); //_deakey 가 대칭키입니다.
    21 byte[] encbuf = oEnc.Encrypt(inbuf, false);

    22 //암호화된 문자열 Base64인코딩
    23 return Convert.ToBase64String(encbuf);

--------------------------------------------------------------------------------------------------------
문제는 10번라인 입니다.
저 부분에서 익셉션에러가 발생하면서 "요청된 개체를 찾을 수 없습니다." 라고 나옵니다. 물론 생성자 값에 bytes 도 같은 결과이며 x.509.import역시 같은 결과가 나옵니다.

"X509EncodedKeySpec는 (바이트 [] encodedKey) 주어진 인코딩 된 키를 사용하여 새로운 X509EncodedKeySpec를 만듭니다."
자바의 생성자 내용입니다.


"X509Certificate2(Byte[])    바이트 배열의 정보를 사용하여 X509Certificate2 클래스의 새 인스턴스를 초기화합니다."
이건 c#의 생성 내용 이구요.

 자바는 인코딩 된 키를 사용하고 c#은 바이트 배열을 사용한다는 부분이 걸리는데
여기서 더이상 손을 댈수가 없습니다. 제 지식의 한계를 느낍니다.ㅠㅠ
내일까지가 기한이긴 한데 해결못하면 주말 출근해야할지도 모릅니다.ㅠㅠ


혹시나 해서 키 파일도 첨부해서 드립니다.
개인키는 업체가 공개하기좀 껄끄럽다고 합니다.ㅡㅡ; 키만 바꾸면 되는데 어이가 없더라구여..


r+KVnANae8w8Rmf+0p/5bciAAzlUkgPS/rk2XIflees= 대칭키

VKM4FSUPjh31j8QlUt1Bg9/dssLtGg1AUf+umY62VQcYJFo0OLjoyw7alcPATjACIlNJullCFQUqKhpHGMnd5FjisfoUcKHjGvOQOszvH2IXMnNae2UTxQSMDHwhK7i6NMrynBX/Wv16VvVzVJ0HTuCDrqXZ27YRRSkgxfvudF8= b업체가 공개키를 이용하여 대칭키를 암호화한 값(tobase64)

Aey8Z3i+kgCiPaJdl62X022BaaR+gWFC2UBu1x5Kvsb9d1gni0PR2GF48Ux6CwRVVRVGRwjyW7tMQxoh0fAGV1XBMbcyWdzEu7Jmi+j+cNaaaoWF/BxtHYd4cN4sRK2/b4ELM8yDr3nicgEw3fXsRYJ0eXNGcOX+MTwPwuPRgXv9hJHsCcW4SZNhY/DV7wCCksKnpVo00vg9RXkBUfgfPsO7

RSAParameters RSAKeyInfo = new RSAParameters();
RSAKeyInfo.Modulus = bytes; 이방식을 이용하여 암호화 했는데 길이가 맞지 않아 복호화하는데 에러가 나더라구여..이방법은 아닌듯합니다.ㅠ

방향만 제시해 주셔도 정말 감사하고 저부분의 해결책까지 주신다면 정말 너무너무 감사하겠습니다.

그럼 좋은 하루 되시기 바랍니다.





[연관 글]






[최초 등록일: ]
[최종 수정일: 11/22/2012]


비밀번호

댓글 작성자
 



2012-11-23 05시10분
개인키를 공개하기엔 껄끄러운 것은 사실이니 이해해 주세요. ^^

저도 그런 식의 암호화 파일을 로드해 본적은 없지만 검색해 보니 다음의 글이 나옵니다.

How to use key files in RSA Encryption using C#?
; http://stackoverflow.com/questions/6868867/how-to-use-key-files-in-rsa-encryption-using-c

위의 글에 따라 BouncyCastle.Crypto.dll 을 참조해서 Org.BouncyCastle.Security.PublicKeyFactory.CreateKey를 이용하여 로드해 보세요.
정성태
2012-11-23 05시14분
[우라미윰] 정말 많은 도움이 되었습니다. 감사합니다.ㅎㅎ
[guest]
2013-01-15 08시56분
"우라미윰"님... 아래의 글에 윤용한 님이 더 확실한 답변을 달아 주셨습니다.

http://www.sysnet.pe.kr/2/0/1401
정성태

... 16  17  18  19  20  21  22  23  24  25  [26]  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5257C#초보11/9/20197526파일 저장 방법에 대해 조언 부탁드립니다. [3]
5256세퉁11/8/20196839안녕하세요~ 질문은 아닙니다만.. [1]
5255C#초보11/6/20197383중첩 딕셔너리를 어떻게 만들 수 있을까요? [2]
5252김동수11/4/20197007Windows 10 로그인 ( Credential Provider ) 문의드립니다. [1]
5251kss11/1/20197078c#문법질문입니다. [1]
5250이대희10/31/20197179시작하세요 C# 7.3 프로그래밍 책이 절판이네요. [1]
5249황태관10/24/20197662c# 폼안에 특정 프로그램 불러오기.. [1]파일 다운로드1
5248황태관10/23/20198532C언어로 만든 dll 를 참조해서 c#으로 만들려면.. [3]
5245민성10/21/20197585안녕하세요 Ui 스레드 접근에 대해서 질문드리도록 하겠습니다. [1]
5244hbli...10/20/20197012두개의 쓰레드에서 하나의 Queue 리스트 사용시 질문드립니다. [2]
5243최선호 donator10/18/20196619Screen Capture 와.. Overlay 질문 좀 드릴게요 ㅠ.ㅠ ( 장문 주의..... ) [2]
5241C#초보10/16/20198645C# USB 통신 구현 관련 질문 드립니다! [1]
5240김동규10/15/20198580런타임 시 Encoding.Default를 UTF-8로 설정할 수 있을까요? [3]
5239밤톨이10/13/20196822시놀리지 DSM에 asp.net core 2 웹서버 구축이 가능한가요? [1]
5238권석헌10/2/20197372C# - C++ 간의 Memorymapped file 관련 Data 질문좀 드립니다 선생님 [1]
5237유호성10/1/20197141사용자 정의 컨트롤 VS IDE에서만 Exception 발생 [2]
5234koko9/25/20199400안녕하세요. 64bit WPF -> 32bit C++ DLL Import사용 문의 드립니다. [3]
5232fox3...9/24/20197201C# Memorymappedfile 재 업로드 드립니다.(실행순서 및 질문내용 정리) [7]파일 다운로드1
5231fox3...9/24/20197607C# 메모리맵드파일 관련 질문드립니다. 최소한의 재현가능코드 첨부후 재질문 드립니다. [2]파일 다운로드1
5230질문9/23/20197258C++ 로 만든 dll 을 C#에서 사용할 때 질문 [2]
5229fox3...9/23/20199642C# 메모리맵드파일 관련 질문드립니다. [2]
5227세퉁9/23/20198313WPF Textblock 폰트 크기에 따라 글자 색이 깨지는 현상이 있습니다. [3]파일 다운로드1
5226김대훈9/23/20197957정말 황당한 경우입니다.. [2]
5223김태균9/19/20197686책 소개 링크가 7.1버전판으로 이어집니다. [1]
5222냥냥이9/14/20198239프로그래밍 논리력이 많이 부족합니다 [3]
5219티지레몬9/9/20199745c# PCB 자동화 프로그램(윈도우 폼 위주로 작업) 제작 준비 [3]
... 16  17  18  19  20  21  22  23  24  25  [26]  27  28  29  30  ...