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

1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5832김지우2/21/20232952event와 delegate의 차이 , event를 써야하는 이유 [1]
5831이우람2/20/20233189ref 전역변수가 pinned가 될수 있나요? [2]
5830냉수마찰2/19/20233481C# GridView에 Column별 데이터 추가하는 방법에 대해 [1]
5829수박942/19/20233491키움 API를 윈폼과 WPF의 네임스페이스 없이 콘솔이나 WinUI3에서 사용할 수 있는 방법이 있나요? [2]파일 다운로드1
5828김재영2/19/20233284장기적으로는 this 구문을 안쓰는게 맞을까요? [2]
5827lee2/18/20233185파이썬 설치 오류 질문입니다 [1]
5826Syong2/14/20233777Socket 관련 Leak (OverlappedAsyncResult, OverlappedData) 관련 문의 [7]파일 다운로드1
5825박성원2/14/20233341Listview 컨트롤의 화면 전환 시 갱신 속도 [1]
5823검은콩2/13/20233938catch(Exception ex)의 line번호를 쉽게 알 수 없는지요? [7]
5822김지우2/11/20233194책을 보면서 sync, async 이해가 되지 않는 부분이 있습니다. [5]파일 다운로드2
5821검은콩2/9/20233216Async 신뢰성과 소켓데이터 [4]
5820차가워2/8/20233307다른 프로세스 실행 후 포커스 가져오기 [3]
5819취준생2/7/20233411WPF 관련 실무가 궁금합니다. [3]
5818윤길2/7/20232852ObservableCollection 에서 INotifyPropertyChanged 구현해야하나요? [2]
5817흰털너부리2/7/20232997배포 시 winform 실행 콘솔로그 보는 방법 [1]
5816흰털너부리2/6/20232818.net core json array validation 질문 드립니다. [1]
5815김재영2/6/20232940종단간 암호화에 대해 시나리오인데 타당한 시나리오일까요? [2]
5814한예지 donator2/6/20233302decompile? [9]
5813김재영2/5/20233185openssl genrsa 2048시 키 생성이 다르게 됩니다. - 파일첨부 [4]파일 다운로드1
5812김재영2/5/20233436openssl genrsa 2048시 키 생성이 다르게 됩니다. [2]
5811치르바2/3/20233277MiniDumpWriteDump API로 덤프수집을 했는데요.. [3]
5810이건우1/31/20233398윈도우서비스를 통한 웹통신관련 질문입니다 [3]
5809이상훈1/31/20233841다채널 영상 디스플레이어 개발 관련 질문입니다. [3]
5808근우1/30/20233498WPF 에서 UserControl 과 ControlTemplate 의 차이점은 무엇인가요? [6]
5807궁금맨1/28/20234657C# 10 책에 나온 예제의 결과가 제 컴에서는 좀 달라서요. 이유가 궁금합니다. [1]
5806스레드1/25/20233171총정리 - 다양한 스레드들 [초안] [1]파일 다운로드1
1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...