需要帮助去除串奇怪的字符(Need help removing strange characters

2019-10-17 00:17发布

目前,当我提出用java.security.Signature中的签名,它传回一个字符串。 我似乎不能因为有特殊字符,只能当我的字符串复制到记事本+ +,如果我删除这些特殊字符我可以使用字符串的遗体在我的计划中可以看出,从有到使用此字符串。

在记事本中,他们看起来像黑盒子的话ACK GS STX SI SUB ETB BS VT

我真的不明白,他们是如此的难以启齿如何让他们的旅程。

有没有办法,我可以运行删除这些和潜在的相似字符的功能?

当我使用的职位提供以base64类,我不能回去签名

System.out.println(signature);
String base64 = Base64.encodeBytes(sig);
System.out.println(base64);
String sig2 = new String (Base64.decode(base64));
System.out.println(sig2);

使输出

”zÌý¥y]žd”xKmËY³ÕN´Ìå}ÏBÊNÈ›`Αrp~jÖüñ0…Rõ…•éh?ÞÀ_û_¥ÂçªsÂk{6H7œÉ/”âtTK±Ï…Ã/Ùê²
lHrM/aV5XZ5klHhLbctZs9VOtMzlfc9Cyk7Im2DOkXJwfmoG1vzxMIVS9YWV6Wg/HQLewF/7X6XC56pzwmt7DzZIN5zJL5TidFRLsc+Fwy/Z6rIaNA2uVlCh3XYkWcu882tKt2RySSkn1heWhG0IeNNfopAvbmHDlgszaWaXYzY=
[B@15356d5

Answer 1:

奇怪的字符是因为有密码签名产生字节,而不是字符串。 因此,如果你想有一个打印的表示,你应该Base64编码,它 ( 这里是一个Java的公共域实现 )。

从加密签名剥离非打印字符会使它没用,因为你将无法用它来验证。

更新:

[B @ 15356d5

这是的toString称为一个字节阵列上的结果。 “[”指阵列,“B”是指字节和“15356d5”是数组的地址。 你应该通过你走出解码到[Signature.verify]数组( http://java.sun.com/j2se/1.4.2/docs/api/java/security/Signature.html#verify(字节[ ])) 。

就像是:

Signature sig = new Signature("dsa");
sig.initVerify(key);
sig.verify(Base64.decode(base64)); // <-- bytes go here


Answer 2:

你是如何“制造”的签名? 如果您使用sign的方法,你回来的字节数组,而不是字符串。 这不是一些文本的二进制表示,这只是任意的二进制数据。 这是你应该使用什么样的,如果你需要将其转换成字符串应使用base64相互转换,以避免数据损坏。



Answer 3:

如果我没有理解你的问题,你需要摆脱的字符与低于32码,也许除了烧焦9(标签),焦炭10(新线)和焦炭13(回报)。

编辑:我与其他人作为处理这样的加密输出同意是不是你通常想要的东西。



文章来源: Need help removing strange characters from string