ฉันกำลังพยายามเซ็นชื่อสตริงโดยใช้ไลบรารี BouncyCastle รหัสของฉันใช้งานได้ แต่สตริงผลลัพธ์เต็มไปด้วยอักขระแปลก ๆ และสัญชาตญาณของฉันก็บอกว่ามีบางอย่างผิดปกติ รหัสของฉันมีลักษณะเช่นนี้
Security.addProvider(new BouncyCastleProvider());
FileReader fileReader = new FileReader(new File("certs/private.pem"));
PEMReader r = new PEMReader(fileReader);
PrivateKey privateKey = (PrivateKey) r.readObject();
r.close()
String toSign = "hello world";
Signature signature = Signature.getInstance("SHA1withRSA","BC");
signature.initSign(privateKey);
signature.update(toSign.getBytes("UTF-8"));
byte[] signedArray = signature.sign();
String signedString = new String(signedArray, "UTF-8");
และสตริงผลลัพธ์ (signedString) มีลักษณะ (แย่มาก) เช่นนี้:
�����jc.������c�1�#�ٶ����E8����a��f8���t�~W�{%��\Z#�� มัน��ҽ;��n��k�n{U>&�d�_���&��?��g� z\�k�g���e~�S4���G�g ��U�:��s>i�%YL�n3�������Y��9����T���}�Usb�&����eշѾUr�Y�ڝ[ j�h~mu\3U��j���c�U�ac����t��ไม่-��1J�B]�
private.pem ถูกสร้างขึ้นด้วยคำสั่งนี้
openssl req -new -x509 -days 3652 -nodes -out private.crt -keyout private.pem.
ความช่วยเหลือหรือคำแนะนำใด ๆ จะได้รับการชื่นชมอย่างมาก
แก้ไขแล้ว
สิ่งที่ฉันทำคือเข้ารหัสอาร์เรย์เดอไบต์เป็น Base64 โดยใช้บรรทัดนี้
byte[] encodedArray = org.bouncycastle.util.encoders.Base64.encode(signedArray);
และว้าว!