Java返回加密后的字符串给客户端

标签 java jsp encryption

我正在使用 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/

相关文章:

java - 执行 jar 文件方法并检索返回

java - 正则表达式在 Android 中不起作用,但在 Java 中运行良好

java - 使用 Displaytag 从 Struts2 表中的行中检索值

c++ - srand 导致我的程序卡住

java Tokenizer 滑动

java - 访问 Servlet 过滤器中的上下文参数

java - 使用 Google Gson 创建 json

java - 部分解密废话

performance - 在 Delphi 中保护/加密嵌入式数据库

java - 如何使用 JSch 的 SFTP channel 只获取目录和文本文件?