JAVA获得字符串二进制码的问题 String.getBytes()问题
最近在自己写一个aes加密函数,参考的是php版的加密函数。在加密函数中用到了ord函数获得字符串的二进制码,java中没有这个函数,只能用String.getBytes...
最近在自己写一个aes加密函数,参考的是php版的加密函数。在加密函数中用到了ord函数获得字符串的二进制码,java中没有这个函数,只能用String.getBytes()获得byte[]数组,再把byte转成int。但是现在有个问题,需要获得二进制码的字符串不是字符集中的字(我试验了好几种字符集),获得的都是问号(应该是中文状态下的问号)的二进制码。有没有直接把String转正byte 或者单字节的char或者int的方法呀。
���N�9__oD��J�这个是字符串 获得的加密结果是这个 只能把这个转换成byte了 就是不知道怎么转呀 用getbytes()获得的�的二进制码 是中文问号的二进制码 有别的方法把这个字符串转换成byte吗。我用byte[] a =(byte[]) str.getbytes();肯定是不行的。 展开
���N�9__oD��J�这个是字符串 获得的加密结果是这个 只能把这个转换成byte了 就是不知道怎么转呀 用getbytes()获得的�的二进制码 是中文问号的二进制码 有别的方法把这个字符串转换成byte吗。我用byte[] a =(byte[]) str.getbytes();肯定是不行的。 展开
展开全部
PHP中的汉字部分是由文件的编码决定的。或者说目前PHP的字符串不支持汉字,把汉字看成字节原封不动的输出。Java的字符串支持汉字,要另外注意编码。比如PHP使用GBK编码的文件和java通讯时,Java的字符串就要str.getBytes("GBK");转成字节后参与编码。
另外要注意PHP的MCrypt库没有预置补齐函数和键的处理函数,
PHP在AES编码前,要写好和Java一致的,对键和数据进行相应的补齐和处理。
比如Java的AES/CBC/PKCS5Padding 方式,PHP中就要手工写一个PKCS7补齐的方法,
才可能和Java通讯。
另外要注意PHP的MCrypt库没有预置补齐函数和键的处理函数,
PHP在AES编码前,要写好和Java一致的,对键和数据进行相应的补齐和处理。
比如Java的AES/CBC/PKCS5Padding 方式,PHP中就要手工写一个PKCS7补齐的方法,
才可能和Java通讯。
更多追问追答
追问
现在就是string转字节的时候有问题呀,所有字符集转换这个字符串(���N�9__oD��J�)的时候都无法正确获得它的值。
前边的听懂了,后边的不太懂。
追答
部分字节值是不用来被显示的。比如大于127的值就在大多数字符编码下没法正确显示。
字节作为数据,用于存储,而拿来直接显示。所以你强行逐个显示字节必然会乱码
搞清楚字节和字符的区别。在所在环境下会把每个字节强行转换成本地编码的字符,比如gbk,utf8的字符,当本地字符或当前字体中不含有能代表字节值的字符符号,就会用“问号字符�”代替。
getBytes转成“字节串”后,只参与编码操作,不再直接作为字符显示。显示就必须重新编码。
展开全部
//将字符串转换成二进制字符串
private String StrToBinstr(String telephone) {
String str="ewyuryweu23323";
char[] strChar=str.toCharArray();
String result="";
for(int i=0;i<strChar.length;i++){
System.out.print(strChar[i]+" ");
result +=Integer.toBinaryString(strChar[i])+" ";//这句话
}
return result;
}
private String StrToBinstr(String telephone) {
String str="ewyuryweu23323";
char[] strChar=str.toCharArray();
String result="";
for(int i=0;i<strChar.length;i++){
System.out.print(strChar[i]+" ");
result +=Integer.toBinaryString(strChar[i])+" ";//这句话
}
return result;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询