2012-11-22 30 views
5

पर संदेश और हस्ताक्षर कनवर्ट करें मेरे पास एक X509CertificateObject है, जो मिलान करने वाला RSAPublicKey है और बाइट सरणी के रूप में कुछ संदेश ऑब्जेक्ट के लिए एक मान्य डिजिटल प्रमाणपत्र वाला एक बाइट सरणी बनाने में कामयाब रहा है।BouncyCastle CMSSignedData ऑब्जेक्ट

दुर्भाग्यवश जिस प्रणाली पर मैं निर्माण कर रहा हूं वह केवल CMSSignedData ऑब्जेक्ट्स इनपुट के रूप में स्वीकार करता है। मैं अपने मूल बिल्डिंग ब्लॉक को ऐसे वैध CMSSignedData ऑब्जेक्ट में कैसे परिवर्तित करूं?

पृष्ठभूमि: मैं this example (पाचन SHA512) के अनुसार जावा बाउंसी कैसल आरएसए अंधा हस्ताक्षर के साथ प्रयोग कर रहा हूं और परिणाम को मानक हस्ताक्षर प्रसंस्करण में फ़ीड करने की आवश्यकता है।

उत्तर

0

सबसे पहले, आप शायद अपने डेटा को एक निजी कुंजी से साइन करना चाहेंगे। विचार यह है कि हस्ताक्षर केवल कुछ ही हो सकता है जिसे आप बना सकते हैं। एक आप पाते हैं कि शेष निम्नानुसार होना चाहिए:


X509Certificate signingCertificate = getSigningCertificate(); 
//The chain of certificates that issued your signing certificate and so on 
Collection&ltX509Certificate> certificateChain = getCertificateChain(); 
PrivateKey pk = getPrivateKey(); 
byte[] message = "SomeMessage".getBytes(); 

CMSSignedDataGenerator generator = new CMSSignedDataGenerator(); 
certificateChain.add(signingCertificate); 
generator.addCertificates(new CollectionStore(certificateChain)); 

JcaDigestCalculatorProviderBuilder jcaDigestProvider = new JcaDigestCalculatorProviderBuilder(); 
jcaDigestProvider.setProvider(new BouncyCastleProvider()); 
JcaSignerInfoGeneratorBuilder singerInfoGenerator = new JcaSignerInfoGeneratorBuilder(jcaDigestProvider.build()); 

AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SHA1withRSA"); 
AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId); 
AsymmetricKeyParameter privateKeyParam = PrivateKeyFactory.createKey(pk.getEncoded()); 
ContentSigner cs = new BcRSAContentSignerBuilder(sigAlgId, digAlgId).build(privateKeyParam); 

SignerInfoGenerator sig = singerInfoGenerator.build(cs, signingCertificate); 
generator.addSignerInfoGenerator(sig); 

CMSSignedData data = generator.generate(new CMSProcessableByteArray(message), true);