gpt4 book ai didi

java - BouncyCaSTLe 签名字符串中的奇怪字符

转载 作者:行者123 更新时间:2023-12-02 04:21:03 26 4
gpt4 key购买 nike

我正在尝试使用 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~mu\3U��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 类,它将为您进行转换。如果您确实使用 Base64,请记住在检查签名之前转换回字节。

关于java - BouncyCaSTLe 签名字符串中的奇怪字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32765715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com