1
我正在使用BouncyCastle生成DSA簽名,但使用本機JCE來驗證它。BouncyCastle在PC上使用本地Java生成的Veryfing簽名JCE
注:我有一個J2ME客戶端本身不支持簽名,因此對於BouncyCastle的需要)
所以工作時,在客戶端上進行如下產生數字簽名:
DSASigner sig = new DSASigner();
sig.init(true, privateKey);
String plaintext = "This is the message being signed";
BigInteger[] sigArray = sig.generateSignature(plaintext.getBytes());
...
sigArray
包含2個BigIntegers
r和s。
此簽名然後必須傳輸到使用本機JCE驗證簽名的服務器。在服務器端,使用本地Java JCE,它應該是可以驗證的簽名如下:
...
Signature sig = Signature.getInstance("SHA1withDSA");
byte[] sigbytes = Base64.decode(signature);
sig.initVerify(publicKey);
sig.update(plaintext.getBytes());
sig.verify(sigbytes)
我遇到的問題是:我如何編碼sigArray
成可以發送到PC的格式/服務器作爲單個Base64字符串(而不是單獨的r和s),然後可以在服務器上使用本機JCE方法在代碼的第二個代碼段中進行驗證?
到目前爲止,我已經嘗試從r,s數組創建DERObjects(分開,一起作爲一個數組編碼),但仍然沒有運氣。有人遇到過這個?你是如何解決它的?