2017-04-09 11 views
0

C#의 C# 개체에서 반환 된 ulong 인 Object_Handle을 C#의 X509Certificate 개체로 변환하려면 어떻게해야합니까? 여기에 코드가 있습니다.PKCS'11 개체 핸들을 C#의 X509Certificate 개체로 변환하십시오.

이제 foundObjectIds [0]을 X509Certificate 개체로 변환해야합니다.

나는 아래의 방법을 시도하고 그것은 나를 위해 작동하지 않습니다.

IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(ulong))); 
Marshal.StructureToPtr(foundObjectIds[0], ptr, false); 
IntPtr[] arr = new IntPtr[2]; 
Marshal.Copy(ptr, arr, 0, 1); 
X509Certificate2 cert= new X509Certificate2((IntPtr)foundObjectIds[0]); 

답변

0

개체 핸들을 X509Certificate2 개체로 변환 할 수 없습니다. C_GetAttributeValue 기능을 사용하여 인증서 개체의 특성 인 의 값을 읽어야합니다. 속성에는 으로 전달 될 수있는 DER로 인 코드 된 인증서가 X509Certificate2 클래스의 생성자에 포함됩니다.

현재 Pkcs11Interop 라이브러리를 사용하는 경우 HighLevelAPI 대신 LowLevelAPI을 사용하는 이유는 무엇입니까?

+0

저는 최근에이 PKCS11 interop을 보았습니다. 저의 프로토 타입이 저수준 API를 기반으로하기 전에. 난 그냥 highlevel API로 그들을 교체하기 시작했다. 그러나 두 경우 모두 그것은 IntPtr을 반환합니다. 내용을 바이트 []로 복사하고 X509Certifcate를 초기화하는 데 사용하려고합니다. 그러나 오류가 발생합니다. "바이트 배열을 X509Certificate로 변환 할 수 없습니다" –