Its*_*has 1 java encryption jsp
我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());
}
Run Code Online (Sandbox Code Playgroud)
我的加密和解密功能在服务器端运行良好,但是当加密的String返回到客户端时:
?zXi?Xq?????.??PiO??dM-?d??a??\`?"????uJ??yu
Run Code Online (Sandbox Code Playgroud)
客户端控制台显示:
Uncaught SyntaxError: Invalid or unexpected token
Run Code Online (Sandbox Code Playgroud)
我试过UTF-8格式的字符串:
String utfEnc = new String(encrypetBytes, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
但它没有用,我没有想法.
加密是我的jsp页面使用的Java函数(在我的jsp中):
Encryptor enc = new Encryptor(request);
byte[] encData = enc.encrypt(data);
Run Code Online (Sandbox Code Playgroud)
目标是通过http发送此数据:
$.ajax({
type: "POST",
url: serverUrl,
data: <%=encData%>, //Uncaught SyntaxError: Invalid or unexpected token
success: function(){
console.log('done');
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
当你调用doFinal时,你给它一个字节数组而不是字符串.输出是一个字节数组,不一定对应于字符串.这就是你看到所有这些问号的原因.由于您希望通过网络将其作为字符串发送,因此常见的解决方案是使用Base64编码或十六进制将字节数组转换为字符串.Java 8包含Base64.Encoder类,其中有您可以使用的encodeToString方法.Base64.Decoder类包含将编码的字符串转换回原始字节数组的相应方法,然后您可以对其进行解密.
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |