BouncyCastle 签名字符串中的奇怪字符
BouncyCastle weird characters in signed String
我正在尝试使用 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#��it��ҽ;�n��k�n{U>&�d�_���&�?�N��g�
z\�k�g���e~�S4��ƎG�g��U�:��s>i�%YL�n3�����Y��9����T���}�Usb���&�����eշѾUr�Y�ڝ[j�h~muU��j���c�U�ac����t��No-��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);
哇哦!
您的签名是 byte[]
,它不是字符串。尝试将字节数组视为字符串会为您提供所发现的内容。要么将签名保留并存储为字节数组,要么将字节数组转换为字符串兼容格式,例如 Base64。 Java 8 包含 Base64
class 将为您进行转换。如果你确实使用 Base64,那么记得在检查签名之前转换回字节。
我正在尝试使用 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#��it��ҽ;�n��k�n{U>&�d�_���&�?�N��g� z\�k�g���e~�S4��ƎG�g��U�:��s>i�%YL�n3�����Y��9����T���}�Usb���&�����eշѾUr�Y�ڝ[j�h~muU��j���c�U�ac����t��No-��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);
哇哦!
您的签名是 byte[]
,它不是字符串。尝试将字节数组视为字符串会为您提供所发现的内容。要么将签名保留并存储为字节数组,要么将字节数组转换为字符串兼容格式,例如 Base64。 Java 8 包含 Base64
class 将为您进行转换。如果你确实使用 Base64,那么记得在检查签名之前转换回字节。