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
정성태

... 61  62  63  [64]  65  66  67  68  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
976박성준6/13/201112856VS2008 Add-in 구현 관련 질문 [4]
972김길6/6/201114906메모리 해제 예외 처리 관련.. [2]
971강동원5/29/201112594firebird install건 [1]
970임동찬5/18/201113310ASP.net 솔루션 디버깅 관련 [1]
969이성환5/4/201115253WMI 를 사용하지 않고 하드웨어 정보를 가져올 수 없을까요? [3]
968김동미4/28/201114492안녕하세요 다시 한번 문의를 드립니다.. [2]파일 다운로드1
967임동찬4/22/201116967C# using문 관련 [9]
964김동미4/18/201114677wcf IsOneWay 속성관련 문의 입니다..
965정성태4/18/201115769    답변글 [답변]: wcf IsOneWay 속성관련 문의 입니다..
966김동미4/19/201114077        답변글 [답변]: [답변]: wcf IsOneWay 속성관련 문의 입니다.. [1]
963최재훈4/12/201112344wcf inactivityTimeout 설정시 문의 사항이 있습니다. [2]
962임동찬4/8/201112072TFS 사용관련 [1]
961임동찬4/7/201112415XSD & XML & XmlCodeGenerator [2]
960임동찬4/5/201113684XML Schema Editor [4]
959immm3/24/201111685로그인 연동 어려운 건가요? [1]
958꼭지3/3/201113347Supporting compressed request in WCF 3.5 [5]
957임동찬2/21/201113767WCF channel faulted 관련 [2]
956윤용한2/18/201117124WaitHandle.WaitOne 과 Stopwatch에 관한 질문 [3]
955최광욱2/17/201114328TFS 에서 소스 영구 제거 방법 [1]
954한장우2/16/201111955atl activeX 질문이요~ [1]
952박용운2/16/201112902IE8.0에서 BHO [1]
953박용운2/16/201113010    답변글 [답변]: IE8.0에서 BHO
951임동찬2/11/201112880WCF Service Reference [1]
950이성환2/9/201114177Windows application 프로젝트를 참조 했을 때 생성되는 실행파일을 직접 실행 불가능하도록 하고 싶습니다. [6]파일 다운로드1
947김순조1/24/201114200.NET based Com에서 Native ActiveX로 이벤트 보내기?? [2]파일 다운로드1
943김기룡1/3/201117234닷넷 에러시 조치사항관련... [2]
... 61  62  63  [64]  65  66  67  68  69  70  71  72  73  74  75  ...