我正在使用 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 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');
}
});
感谢您的帮助。
最佳答案
当你调用 doFinal 时,你给了它一个字节数组而不是一个字符串。输出是一个字节数组,不一定对应于字符串。这就是为什么您会看到所有这些问号。由于您希望将其作为字符串通过网络发送,常见的解决方案是使用 Base64 编码或十六进制将字节数组转换为字符串。 Java 8 包含 Base64.Encoder 类,其中有您可以使用的 encodeToString 方法。 Base64.Decoder 类包含将编码字符串转换回原始字节数组的相应方法,然后您可以对其进行解密。
关于Java返回加密后的字符串给客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48049531/