1 回答

TA貢獻1847條經驗 獲得超11個贊
OpenSSL 需要 X9.62 簽名。這包括兩個整數值 R 和 S 的 DER 編碼。如果您查看提供程序類的 Bouncy Castle 源代碼,SignatureSpi您會發現:
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(new ASN1Integer(r));
v.add(new ASN1Integer(s));
byte[] derEncodedSignature = new DERSequence(v).getEncoded(ASN1Encoding.DER);
這是您應該使用 Bouncy Castle 對簽名進行編碼的內容。這里r和s應該是BigInteger你在兩個元素結果數組中得到的值。
您可能已經猜到了,您也可以使用 Java JCASignature類來代替,這將產生相同的簽名編碼。如果需要或想要,您可以通過注冊/指示提供者來使用 BouncyCastle 實現作為底層提供者。有趣的是,Bouncy Castle 庫現在有一個非??斓?EC 實現,它擊敗了 Oracle 提供的實現,即使它是在本機代碼中。
該二進制輸出與用于OpenSSL的簽名輸入直接兼容。要創建文本字符串,可以將字節數組編碼為 base 64 字符串(最好沒有行結尾,例如Base64.encode(derEncodedsignature)),然后必須通過openssl enc -base64 -A -d -in signature.txt -out signatureToVerify.bin
添加回答
舉報