我正在使用javax.crypto.Cipher
来加密我想要发送回客户端的字符串:
public byte[] encrypt(String message)
throws Exception {
Cipher cipher = Cipher.getInstance(m_ALGORITHM);
PrivateKey privateKey = m_kp.getPrivate();
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
return cipher.doFinal(message.getBytes());
}
我的加密和解密功能在服务器端运行良好,但当加密的字符串以如下方式返回客户端时:
�zXi�Xq�����.��PiO��dM-�d��a��\`�"����uJ��yu
客户端控制台显示:
Uncaught SyntaxError: Invalid or unexpected token
我尝试过UTF-8格式化String:
String utfEnc = new String(encrypetBytes, "UTF-8");
但它不起作用,我没有想法。
加密是我的jsp页面使用的Java函数(在我的jsp中):
Encryptor enc = new Encryptor(request);
byte[] encData = enc.encrypt(data);
目标是通过http:
发送此数据$.ajax({
type: "POST",
url: serverUrl,
data: <%=encData%>, //Uncaught SyntaxError: Invalid or unexpected token
success: function(){
console.log('done');
}
});
感谢您的帮助。
答案 0 :(得分:5)
当你调用doFinal时,你给它一个字节数组而不是字符串。输出是一个字节数组,不一定对应于字符串。这就是你看到所有这些问号的原因。由于您希望通过网络将其作为字符串发送,因此常见的解决方案是使用Base64编码或十六进制将字节数组转换为字符串。 Java 8包含Base64.Encoder类,其中有您可以使用的encodeToString方法。 Base64.Decoder类包含将编码后的字符串转换回原始字节数组的相应方法,然后可以解密。