2015-06-22 88 views
0

我是Java新手,我有一個簡單的問題。我有帶SHA1withRSA可信私鑰和證書的JKS密鑰庫,我需要爲SOAP消息生成PKCS#7簽名。 我試圖找到一些信息這件事,在那一刻,我有這樣的:如何糾正使用rsa私鑰和java生成簽名?

KeyStore ks = KeyStore.getInstance("JKS"); 
ks.load(...);//load ks from ks path 
//initiate signature(if I do it - Web-Service send me exception:Error while 
//ASN.1-decoding PKCS#7 message 
RSAPrivateKey = (RSAPrivateKey) ks.getKey(...); 
Signature sign = Signature.getInstance("SHA1WithRSA); 
sign.initSign(privatKey); 
sign.update(data)//data - final byte[] data - method argument 
byte[] bb = sign.sign(); 
BASE64Encoder enc = new BASE64Encoder(); 
return encoder.encode(bb); 

請告訴我,我的錯誤呢?也許我需要上課,而且這些代碼並不像我想要的那樣工作得很好。謝謝。

+0

你有什麼錯誤或什麼?這是一個非常普遍的問題「我的錯誤在哪裏?」 –

+0

是否確定'Signature.getInstance(「SHA1WithRSA);'是正確的? –

+0

@ rakeb.void在此之前,我使用了bouncycastle API並簽名驗證錯誤對此代碼:僅ASN.1解碼錯誤 – Giymose

回答

1

不,只生成PKCS#1簽名是不夠的。

PKCS#7指定了Cryptographic Message Syntax (CMS)。這是一個容器格式,不僅僅是一個簽名。您需要實施CMS來創建這樣的簽名。包含CMS實現的衆所周知的庫是Bouncy Castle

用於S/MIME和CMS(PKCS7/RFC 3852)的生成器/處理器。

+0

非常感謝! Bouncycastle對我有好處! – Giymose

相關問題