2014-02-10 2 views
0

C#에서 자체 서명 된 X509Certificate으로 일부 데이터에 서명하고 있습니다. 서명 결과는 바이너리 byte[]입니다. 이 서명을 확장자 .p7bpkcs#7 형식 파일에 저장하고 싶습니다. 필요에 따라 FileStream을 사용하여 저장합니다. 잘못된 p7b 파일을 생성합니다.x509Certificate - pkcs # 7 형식의 이진 서명 저장 (.net C#)

아무도이 서명을 유효한 외부 파일로 저장할 수 있습니까? 또는 접근법에 문제가 있다면 지적 해주십시오.

// 편집 : 코드를 추가 당신은 PKCS # 7에 정의 된 암호화 메시지 구문 (CMS) 메시지 형식을 생성하지 않는 Eugene Mayevski

// Open Store Location & fetch certificate 
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadWrite); 
X509Certificate2Collection certifcates = store.Certificates; 
X509Certificate2 certificate = certifcates[0];` 

// fetch private key 
string publicKeyString = certificate.GetPublicKeyString(); 
RSACryptoServiceProvider privateKey = certificate.PrivateKey as RSACryptoServiceProvider; 

// get binary of data & sign it. 
byte[] buffer = Encoding.Default.GetBytes("Sample data to sign. Although it would be a document."); 
byte[] signature = privateKey.SignData(buffer, new SHA1Managed()); 
+0

http://msdn.microsoft.com/en-us/library/ms180948%28v=vs.85%29.aspx를 보셨습니까? 인증서를 저장하는 대신 서명을 저장 하시겠습니까? – BatteryBackupUnit

+0

예, 서명 자체를 저장해야합니다. 내가 제공 한 링크를 살펴 보았습니다. 나는 네임 스페이스'System.Security.Cryptography.pkcs'를 사용할 수 없기 때문에이 기능들이 .net 4.0에 캡슐화되어 있다고 생각한다. 어쨌든 데이터가 서명 및 검증 중입니다. 내가 원하는 건 서명을 적절한 파일 형식으로 저장하는 것뿐입니다. – Ram

+0

먼저 서명을 생성하는 데 사용하는 코드를 확인하는 것이 좋습니다. 실제로 PKCS # 7 서명을 생성하지 않아도되므로 문제가 될 수 있습니다. –

답변

0

에 의해 요구한다. 서명은 컨테이너 형식에 배치 할 수 있습니다.

직접 CMS 형식의 메시지를 만들려면 Microsoft documentation을 보거나 C# version of Bouncy Castle을 사용하십시오.

+0

설명해 주셔서 감사합니다. 나는 암호문을 더 파헤 치면 이것을 소화 할 수 있었다. 보안 링크가 추가 될 때까지이 클래스는 3.0까지 개까지 &이 클래스들은 접근 할 수 없다는 것을 보여주기 때문에 문서 링크에서 가리키는 API는 다소 혼란 스럽다. 그러므로 그것은 쓸데없는 느낌을줍니다. @BatteryBackupUnit 나는 이것 때문에 당신의 의견을 이해하지 못했습니다. – Ram