首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java和Javascript Blowfish

Java和Javascript Blowfish
EN

Stack Overflow用户
提问于 2014-01-25 18:32:40
回答 1查看 2.5K关注 0票数 0

我需要从一个基于java的服务器向客户端发送一些用Blowfish加密的数据。我可以成功地加密数据,但不能在客户端解密。

以下是我的java代码:

代码语言:javascript
复制
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。

代码语言:javascript
复制
out = blowfish.decrypt(code, skey, {cipherMode: 1, outputType: 0})

结果,我得到了一些奇怪的人物。我的密码怎么了?

UPD:这段代码工作得很完美:

代码语言:javascript
复制
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");

联署材料:

代码语言:javascript
复制
out = blowfish.decrypt(code, skey, {cipherMode: 0, outputType: 0})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-27 16:09:35

向浏览器发送带有\u0000字节的文本可能会导致各种奇怪的问题。这就是为什么您应该对数据BASE64进行编码,将其发送到客户端,然后在本地解码它。

另一个问题是new String(encrypted, "UTF-8");,因为编码的字节数组将包含非法的UTF-8序列.尝试new String(encrypted, "iso-8859-1");,它是对任意字节的1:1编码。但是,同样,0字节可能会混淆之间的某个组件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21354559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档