如何将"[B@17da562"这样的字符传转换成byte[] 如何将"[B@17da562"这样的字符传转换成byte[]谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String str = "[B@17da562";str.getBytes() String类方法public byte[] getBytes()用平台默认的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中 可能我说得不太清楚"[B@17da562"这个实际上是已经得到的byte[]只不过是在一个URL的参数中但是JSP程序通过这个URL参数,实际上得到的是一个String了我怎样将"[B@17da562"这个结果再转换成byte[]? String name=request.getParameter("name"); if(name==null) name=""; byte b[]=name.getBytes("GBK"); 原来“[B@17da562”是内存表示啊。我说怎么看着眼熟呢。要是通过URL传的话。需要你在URL中起很多的相同的名字。如:aaa.do?bytes=a&bytes=b&bytes=c&bytes=d然后在服务器端用:String[] bytes = requery.getParameterValues("bytes")即可 楼主的那个"[B@17da562"是内存地址· 怎样对JSP中采用DES加密的参数解密?我有一个类似"http://10.143.137.25/web800/call/a.jsp?key=[B@17da562"这样的URL怎样对key解密?另外,我已经拥有了/** * DES加密的,文件中共有两个方法,加密、解密 * @author Lion * @author www.lionsky.net */这样的JAVA例程但我不知道对已经得到的类似[B@17da562这样的字串怎么解密 恩。想了想还是有些关系的。你既然有DES解密的方式。那就把[B@17da562解密试试啊。不过说实话,我怎么都觉得这个[B@17da562像内存的显示 我有一个类似"http://10.143.137.25/web800/call/a.jsp?key=[B@17da562"这样的URL 其中key已经采用DES加密怎样对key解密? ? 难道是这样?String key = request.getParameter("key");if(key!=null){ key = 你的DES解密方法.解密(key);} 我有一个类似"http://10.143.137.25/web800/call/a.jsp?key=[B@17da562"这样的URL 其中key已经采用DES加密 现在我的key到底是String 还是 byte[]? package com.wisdom.web;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.NoSuchPaddingException;import javax.crypto.SecretKey;import java.security.NoSuchAlgorithmException;import java.security.Security;/** * DES加密的,文件中共有两个方法,加密、解密 * @author Lion * @author www.lionsky.net */public class DES { private String Algorithm = "DES"; private KeyGenerator keygen; private SecretKey deskey; private Cipher c; private byte[] cipherByte; /** * 初始化 DES 实例 */ public DES() { init(); } public void init() { Security.addProvider(new com.sun.crypto.provider.SunJCE()); try { keygen = KeyGenerator.getInstance(Algorithm); deskey = keygen.generateKey(); c = Cipher.getInstance(Algorithm); } catch(NoSuchAlgorithmException ex){ ex.printStackTrace(); } catch(NoSuchPaddingException ex){ ex.printStackTrace(); } } /** * 对 String 进行加密 * @param str 要加密的数据 * @return 返回加密后的 byte 数组 */ public byte[] createEncryptor(String str) { try { c.init(Cipher.ENCRYPT_MODE, deskey); cipherByte = c.doFinal(str.getBytes()); } catch(java.security.InvalidKeyException ex){ ex.printStackTrace(); } catch(javax.crypto.BadPaddingException ex){ ex.printStackTrace(); } catch(javax.crypto.IllegalBlockSizeException ex){ ex.printStackTrace(); } return cipherByte; } /** * 对 Byte 数组进行解密 * @param buff 要解密的数据 * @return 返回加密后的 String */ public String createDecryptor(byte[] buff) { try { c.init(Cipher.DECRYPT_MODE, deskey); cipherByte = c.doFinal(buff); } catch(java.security.InvalidKeyException ex){ ex.printStackTrace(); } catch(javax.crypto.BadPaddingException ex){ ex.printStackTrace(); } catch(javax.crypto.IllegalBlockSizeException ex){ ex.printStackTrace(); } return (new String(cipherByte)); }} 我用createDecryptor(key.getBytes())为什么不行呢? 楼主的[B@17da562其实上 直接或间接调用byte[]的toString方法获得的字符串,我想要达到楼主的意愿估计很难。但是我觉得你可以改变设计思路,不直接传byte[]的toString()方法的结果(可能是你隐式的调用,比如用了 +操作符等),你要硬传给url也可以,比byte[]里的内容取出来再传,但要注意几个问题:1,特殊字符可能被转换,比如 字节数组里可能有(byte)'&'等要进行处理2,数组太长用GET方法没法传你如果硬要这么作可以采用HttpConnection等对象来操作建议你改进你的设计 当然不行了。当你调用 createEncryptor时,他把一个字符串加密后放入了Byte[]中了。而你有想通过Http传到另外的页面进行解密。你要知道目前的网络传输全是基于字符串的。数组是不可以直接传输的。你这里传的其实是加密后的Byte[]数组的内存地址。两个方法:1.你需要再传之前先把这个Byte连成字符串key ,然后在a.jsp再调用createDecryptor(key.getBytes())2.像我先前说的那样。把加密后的Byte[]连成bytes=a&bytes=b&bytes=c&bytes=d 传过去也可以第二种方法一定是可以的。第一中我不敢肯定,你可以试试。 什么是 类初始化? 报表工具Birt:动态指定表名 如何给一个工程打jar包 [求助]我想分隔字符串如何处理? byte数组的复制追加问题 jdbc连接mysql java程序运行时是先执行main方法还是先进行初始化?大伙都来讨论讨论! 怎样删除文件? 怎样设置applet访问本地方法.dll的路径?高手指教!!!!!! 如何对图片进行操作, 如单击、双击或拖动等? java打包,请高手指点 不太明白这道题,希望达人指点,谢谢。
str.getBytes()
方法
public byte[] getBytes()
用平台默认的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中
"[B@17da562"这个实际上是已经得到的byte[]
只不过是在一个URL的参数中
但是JSP程序通过这个URL参数,实际上得到的是一个String了
我怎样将"[B@17da562"这个结果再转换成byte[]?
if(name==null) name="";
byte b[]=name.getBytes("GBK");
要是通过URL传的话。需要你在URL中起很多的相同的名字。
如:aaa.do?bytes=a&bytes=b&bytes=c&bytes=d
然后在服务器端用:
String[] bytes = requery.getParameterValues("bytes")
即可
我有一个类似"http://10.143.137.25/web800/call/a.jsp?key=[B@17da562"这样的URL
怎样对key解密?另外,我已经拥有了
/**
* DES加密的,文件中共有两个方法,加密、解密
* @author Lion
* @author www.lionsky.net
*/
这样的JAVA例程
但我不知道对已经得到的类似[B@17da562这样的字串怎么解密
不过说实话,我怎么都觉得这个[B@17da562像内存的显示
其中key已经采用DES加密
怎样对key解密?
if(key!=null){
key = 你的DES解密方法.解密(key);
}
其中key已经采用DES加密 现在我的key到底是String 还是 byte[]?
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
/**
* DES加密的,文件中共有两个方法,加密、解密
* @author Lion
* @author www.lionsky.net
*/
public class DES {
private String Algorithm = "DES";
private KeyGenerator keygen;
private SecretKey deskey;
private Cipher c;
private byte[] cipherByte; /**
* 初始化 DES 实例
*/
public DES() {
init();
} public void init() {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
try {
keygen = KeyGenerator.getInstance(Algorithm);
deskey = keygen.generateKey();
c = Cipher.getInstance(Algorithm);
}
catch(NoSuchAlgorithmException ex){
ex.printStackTrace();
}
catch(NoSuchPaddingException ex){
ex.printStackTrace();
}
} /**
* 对 String 进行加密
* @param str 要加密的数据
* @return 返回加密后的 byte 数组
*/
public byte[] createEncryptor(String str) {
try {
c.init(Cipher.ENCRYPT_MODE, deskey);
cipherByte = c.doFinal(str.getBytes());
}
catch(java.security.InvalidKeyException ex){
ex.printStackTrace();
}
catch(javax.crypto.BadPaddingException ex){
ex.printStackTrace();
}
catch(javax.crypto.IllegalBlockSizeException ex){
ex.printStackTrace();
}
return cipherByte;
} /**
* 对 Byte 数组进行解密
* @param buff 要解密的数据
* @return 返回加密后的 String
*/
public String createDecryptor(byte[] buff) {
try {
c.init(Cipher.DECRYPT_MODE, deskey);
cipherByte = c.doFinal(buff);
}
catch(java.security.InvalidKeyException ex){
ex.printStackTrace();
}
catch(javax.crypto.BadPaddingException ex){
ex.printStackTrace();
}
catch(javax.crypto.IllegalBlockSizeException ex){
ex.printStackTrace();
}
return (new String(cipherByte));
}
}
我想要达到楼主的意愿估计很难。
但是我觉得你可以改变设计思路,不直接传byte[]的toString()方法的结果
(可能是你隐式的调用,比如用了 +操作符等),
你要硬传给url也可以,比byte[]里的内容取出来再传,但要注意几个问题:
1,特殊字符可能被转换,比如 字节数组里可能有(byte)'&'等要进行处理
2,数组太长用GET方法没法传你如果硬要这么作可以采用HttpConnection等对象来操作
建议你改进你的设计
当你调用 createEncryptor时,他把一个字符串加密后放入了Byte[]中了。
而你有想通过Http传到另外的页面进行解密。你要知道目前的网络传输全是基于字符串的。
数组是不可以直接传输的。你这里传的其实是加密后的Byte[]数组的内存地址。
两个方法:
1.你需要再传之前先把这个Byte连成字符串key ,然后在a.jsp再调用createDecryptor(key.getBytes())2.像我先前说的那样。把加密后的Byte[]连成bytes=a&bytes=b&bytes=c&bytes=d 传过去也可以第二种方法一定是可以的。第一中我不敢肯定,你可以试试。