어떻게 사용할 수 있는 키 blob 에서 생성된 Win32 원 환경에.인터넷 응용 프로그램?

StackOverflow https://stackoverflow.com/questions/49211

문제

기존에 작성된 응용 프로그램에서는 C++로 Windows.이 응용 프로그램을 사용하 Win32 원 환경을 생성하 TripleDES 세션키 암호화/해독하는 데이터입니다.우리가 사용하는 는 지수의 하나의 트 를 내보내는 세션 키로 blob,할 수 있는 blob 저장되 어딘가에서는 암호 해독된 형식입니다.

문제는 우리는 어떻게 사용이 우리입니다.인터넷 응용 프로그램(C#).프레임 워크를 캡슐화/랩의 많은 무엇인원 환경을하고있다.문제의 일부입하고 유연한 데이타 모델입국는 TripleDES 알고리즘 Microsoft 고급 암호화 공급자 168 트(3 키 56 비트의).그러나.NET framework 국의 키 192 트(3 키 64bits).분명히,3 바이트.NET 프레임워크는 패리티?

어쨌든,우리는 우리를 읽을 필요가 핵심 부분의 blob 및게 사용할 수 있는 것에서 우리입니다.인터넷 응용 프로그램.현재 우리는 못하고 예상된 결과를 시도할 때 키를 사용합니다.NET.암호 해독에 실패 miserably.어떤 도움을 주시면 감사하겠습니다.

업데이트:

했던를 해결하기 위한 방법이 올라와 있는 솔루션을 내에 게시한 시간입니다.그러나 여전히 의견을 부탁드립니다.

도움이 되었습니까?

해결책

소개

내가 마지막으로 점점을 게시하는 솔루션입니다.나는 그것을 희망을 제공하기 위해 어떤 도움을 다른 사람이 할 수 밖에 하는 유사한 유형의 것들입니다.하지 않을 수도 있 많은 참조가 이것을 하고 있습니다.

필수 조건

기 위해서 많이 이해하는 것이 필요하 읽 는 지수의 하나의 트, 할 수 있는 내보내기 세션 키를 blob(잘 알려진 바이트 구조).한 할 수 있습니 그들이 원하는 것 이 바이트 스트림지만,그것을 보유하고는 모든 중요한 열쇠이다.

MSDN 문서는 혼란

이 예제에서,나를 사용하는 Microsoft 고급 암호화 공급자, 으로,트리플 DES(CALG_3DES)알고리즘이 있습니다.첫 번째 것은 불우해었다는 사실이 길에 나열된 168 비트 블록의 길이 64 비트입니다.할 수 있는 방법 키 길이 될 168?세 가지의 키 56 비트?어떻게 되나 다른 바이트는?

그래서 그 정보를 시작한 다른 곳에서 읽은 어떻게 마지막 바이트는 패리티 정말과 어떤 이유에원 환경 스트립니다.그것은 정말까요?보이런 종류의 미친은 그들이 그렇게 하겠지만 확인.

의 소비가 핵심이다.NET

를 사용하는 TripleDESCryptoServiceProvider, 나는 발언에서 문서를 표시:

이 알고리즘을 지원하는 키 길이에는 128 비트 192 비트 단위로는 64 비트입니다.

그래서 만약 지원 환경에는 키 길이의 168,어떻게 얻습니다.NET 지원하는 지원의 배수 64?따라서,.순면의 API 의 패리티로 계정을 어디 지원 환경지 않습니다.중 하나로 상상할 수... 혼란 나.

그래서 이 모든 것,내가 노력하는 방법을 알아낼 재구성 하는 열쇠다.NET 측면에 적절한 패리티 정보입니다.행할 수 있지만,매우 재미있는...단지 않습니다.일단 제가 이 모든 장소,모든 것이 끝났 실패의 자본 F.

아직까?좋기 때문에,나는 다 떨어졌다 내 말을 다시합니다.

구와 불꽃놀이

저렴한 보라 내가 긁 MSDN 에 대한 모든 마지막 비트의 정보를 찾을 충돌하는 조각에서 Win32 CryptExportKey 기능입니다.낮은 보라 내가 찾는 이 작품의 invaluble 정보:

의 데 키 순열을 사용하는 PLAINTEXTKEYBLOB,만이 가득 차있는 키 크기를 포함하여,패리티 비트,내보낼 수 있습니다.다음과 같은 키 크기가 지원됩니다.

알고리즘을 지원하는 키 크기

CALG_DES64 비트

CALG_3DES_112 128 비트

CALG_3DES192 비

그래서 그것을 내보내는 키를 여러 개의 64 비트!와!이 코드를 수정할 수 있습니다.NET 측.

.순수한 수입품 코드 조정

바이트 주문을 유지하는 것이 중요할 때 마음에 가져오는 바이트 스트림을 포함하는 키출되었으로 blob 원 환경에서.두 개의 API 를 사용하지 않는 동일한 바이트의 순서로,따라서 @nic-에 강한 을 나타냅니다,반전하는 바이트 배열은 필수적이기 전에 실제로 사용하려고 열쇠입니다.다른 것보다는 것을 예상대로 작동합니다.단순히 해결된:

Array.Reverse( keyByteArray );

결론

이 도움이 되었으면 좋겠습니다 누군가가있다.내가 너무 많은 시간을 보냈다는 이니다.을 떠나 의견하는 경우 추가적인 질문이 있을 수도우는 것을 도울 수 있습니다.

행복한 암호화!

다른 팁

확인을 잊지 마지막 응답 내가 읽을 수 없습니다:)으로 작업하 3Des 표 RSA 키를 사용합니다.

나는 일에 무리의 코드 키를 공유하여 사이 있습니다.NET,원 환경 및 openssl.견의 많은 좋은 예제 코드는 여기에 일에 대한 열쇠 변환:

http://www.jensign.com/JavaScience/cryptoutils/index.html

일부 3des 에 물건을 어떤 사람들의 예는,그러나 그것과 관련된 openssl->.NET iirc.

또한 단지 뒤돌아보를 통해 RSA 키 코드고 한 나는 내가 하는 일은 사용하여 배열입니다.역()모든 핵심 부품의 RSA 키(D,DP,DQ,InverseQ,계수,P,Q)난로 변환하 endian.내가 기억하는 명백하지 않을 때 첫 번째 달려들의 문제입니다.

희망의 일부는 도움이 됩니다.행운을 빕니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top