RT
其实我要写的是Java的DES解密,只是手动指定密钥
密钥设计的是一个长度为16的String,里面都是十六进制。但Java给的API似乎要长度为8的Byte数组,所以想转过去。。
求解~
其实我要写的是Java的DES解密,只是手动指定密钥
密钥设计的是一个长度为16的String,里面都是十六进制。但Java给的API似乎要长度为8的Byte数组,所以想转过去。。
求解~
解决方案 »
- java调用dll文件中C++类?
- 如何根据参数来new不同的类?
- 分5行列出从2开始的100个素数
- 相对于StringBuilder我还是用String类
- 在JTable中,拖动一列到其它的位置,再点击排序,这时它是对原来在这个位置的列进行排序,怎么样让它对这个新的列进行排序呢?
- 想问一下,什么时候需要用到内部类?
- 请帮忙做下如下的功能
- 求猜数字游戏计算分数方案
- 请教高手:我编译程序出错?但可以运行用!请帮忙指出问题可能在哪个类或方法(在线)
- 求帮助一个双重for循环的算法,是在不知道怎么做
- Could not find the main class Program will exit 解决方案
- 关于JDBC的问题:新手求教
比如:
String s="0123456789abcdef";
变成数组是什么样的?组成8个,还是16个?
public static String toString(byte b){
return new StringBuilder(2).append(HEXs[(b&0xF0)>>4]).append(HEXs[b&0x0F]).toString();
}
public static String toString(byte [] data){
StringBuilder buff = new StringBuilder(data.length<<1);
for(int i=0;i<data.length;i++){
buff.append(HEXs[(data[i]&0xF0)>>4]);
buff.append(HEXs[data[i]&0x0F]);
}
return buff.toString();
}
public static String toString(byte [] data,int offset,int length){
StringBuilder buff = new StringBuilder(data.length<<1);
for(int i=0;i<length;i++){
buff.append(HEXs[(data[i+offset]&0xF0)>>4]);
buff.append(HEXs[data[i+offset]&0x0F]);
}
return buff.toString();
}
public static byte [] toBytes(String hex){
int len = hex.length();
if(len==0)return new byte[0];
if(len%2!=0)throw new IllegalArgumentException("十六进制数据长度不是偶数个");
byte b [] = new byte[(len>>1)];
for(int i=0;i<b.length;i++){
char ch = hex.charAt(2*i);
if(ch>='0' && ch<='9'){
b[i]=(byte)((ch-'0')<<4);
}else if(ch>='a' && ch<='f'){
b[i]=(byte)((ch-'a'+10)<<4);
}else if(ch>='A' && ch<='F'){
b[i]=(byte)((ch-'A'+10)<<4);
}else{
throw new IllegalArgumentException("参数不是十六进制数:"+ch);
}
ch = hex.charAt(2*i+1);
if(ch>='0' && ch<='9'){
b[i] |= (byte)(ch-'0');
}else if(ch>='a' && ch<='f'){
b[i] |= (byte)(ch-'a'+10);
}else if(ch>='A' && ch<='F'){
b[i] |= (byte)(ch-'A'+10);
}else{
throw new IllegalArgumentException("参数不是十六进制数:"+ch);
}
}
return b;
}
public static byte [] toBytes(int number){
byte[] data = new byte[4];
data[0]=(byte)((number>>>24)&0xFF);
data[1]=(byte)((number>>>16)&0xFF);
data[2]=(byte)((number>>>8)&0xFF);
data[3]=(byte)(number&0xFF);
return data;
}
public static byte [] toBytes(long number){
byte[] data = new byte[8];
data[0]=(byte)((number>>>56)&0xFF);
data[1]=(byte)((number>>>48)&0xFF);
data[2]=(byte)((number>>>40)&0xFF);
data[3]=(byte)((number>>>32)&0xFF);
data[4]=(byte)((number>>>24)&0xFF);
data[5]=(byte)((number>>>16)&0xFF);
data[6]=(byte)((number>>>8)&0xFF);
data[7]=(byte)(number&0xFF);
return data;
}
public static byte [] toBytes(int number, boolean littleEndian){
byte[] data = new byte[4];
if(littleEndian){
for(int i=0;i<data.length;i++){
data[i]=(byte)((number>>>(i*8))&0xFF);
}
}else{
for(int i=0;i<data.length;i++){
data[i]=(byte)((number>>>((3-i)*8))&0xFF);
}
}
return data;
}
public static byte [] toBytes(long number, boolean littleEndian){
byte[] data = new byte[8];
if(littleEndian){
for(int i=0;i<data.length;i++){
data[i]=(byte)((number>>>(i*8))&0xFF);
}
}else{
for(int i=0;i<data.length;i++){
data[i]=(byte)((number>>>((7-i)*8))&0xFF);
}
}
return data;
}
public static int toInt(byte[] number){
if(number.length!=4)throw new IllegalArgumentException("数据长度不够4字节");
return (number[0]&0xFF)<<24 | (number[1]&0xFF)<<16 |
(number[2]&0xFF)<<8 | number[3]&0xFF;
}
public static int toInt(byte[] number, boolean littleEndian){
if(number.length!=4)throw new IllegalArgumentException("数据长度不够4字节");
int value = 0;
if(littleEndian){
for(int i=0;i<number.length;i++){
value |= (number[i]&0xFF)<<(i*8);
}
}else{
for(int i=0;i<number.length;i++){
value |= (number[i]&0xFF)<<((3-i)*8);
}
}
return value;
}
public static long toLong(byte[] number, boolean littleEndian){
if(number.length!=8)throw new IllegalArgumentException("数据长度不够8字节");
long value = 0;
if(littleEndian){
for(int i=0;i<number.length;i++){
value |= ((long)(number[i]&0xFF))<<(i*8);
}
}else{
for(int i=0;i<number.length;i++){
value |= ((long)(number[i]&0xFF))<<((7-i)*8);
}
}
return value;
}
}