我需要从一个基于java的服务器向客户端发送一些用Blowfish加密的数据。我可以成功地加密数据,但不能在客户端解密。
以下是我的java代码:
byte[] kd = key.getBytes("UTF-8");
SecretKeySpec ks = new SecretKeySpec(kd, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, ks);
byte[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));
String str = new String(encrypted, "UTF-8");至于js库,我决定使用这 1。
out = blowfish.decrypt(code, skey, {cipherMode: 1, outputType: 0})结果,我得到了一些奇怪的人物。我的密码怎么了?
UPD:这段代码工作得很完美:
byte[] kd = key.getBytes("UTF-8");
SecretKeySpec ks = new SecretKeySpec(kd, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.ENCRYPT_MODE, ks);
byte[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));
String str = new String(Base64.encodeBase64(encrypted), "UTF-8");联署材料:
out = blowfish.decrypt(code, skey, {cipherMode: 0, outputType: 0})发布于 2014-01-27 16:09:35
向浏览器发送带有\u0000字节的文本可能会导致各种奇怪的问题。这就是为什么您应该对数据BASE64进行编码,将其发送到客户端,然后在本地解码它。
另一个问题是new String(encrypted, "UTF-8");,因为编码的字节数组将包含非法的UTF-8序列.尝试new String(encrypted, "iso-8859-1");,它是对任意字节的1:1编码。但是,同样,0字节可能会混淆之间的某个组件。
https://stackoverflow.com/questions/21354559
复制相似问题