package org.iteye.bbjava.threedesmac;
import java.util.Random;
public class ScriUtil {
/**
* 将十六进制 byte数组转换成字符串
* @param datas 十六进制的数据
* @return String 十六进制的字符串
*
* */
public static String hex2String(byte[] datas){
return null;
}
/**
* 把byte数组转换成十六进制字符串
* @param datas 需求转换的byte数组
* @return String 十六进制字符
* */
public static String byte2String(byte[] datas){
return null;
}
/**
* 2进制数取反操作
* @param elems 被取反数
* @return byte[] 取反后的数
* */
public static byte[] changeToReverse(byte[] elems){
byte[] temp = new byte[6];
if(elems != null){
for(int i = 0;i < elems.length ; i ++ ){
temp[i] = (byte) ~elems[i];
}
}else{
throw new NullPointerException("参数为空引用");
}
return temp;
}
/**
* 产生一个byte数组,用户指定的byte数组,并随机填充数值。
* @param elems
* @return byte[]
* */
public static byte[] createRandomBytes(byte[] elems){
if(elems != null){
Random random = new Random();
random.nextBytes(elems);
}else{
throw new NullPointerException("参数为空引用");
}
return elems;
}
/**
* 把指定的两个byte数组串联在一起
* @param elems 第一个byte数组
* @param datas 第二个byte数组
* @return byte[] 串联好的byte数组
*
* */
public static byte[] concatBytes(byte[] elems,byte[] datas){
byte[] temp = null;
if(elems != null && datas!=null){
int n = elems.length + datas.length ;
temp = new byte[n];
System.arraycopy(elems, 0, temp, 0, elems.length);
System.arraycopy(datas,0, temp, elems.length, datas.length);
}else{
throw new NullPointerException("参数其中一个或二个为空引用");
}
return temp;
}
/**
* 把一个不足8字节部数的byte数组补全8字节倍数,以0x00补全。
* @param datas 原始数据
* @return byte[] 补全后的数据
* */
public static byte[] finishBlock(byte[] datas){
byte[] tmBlock = null;
if(datas != null){
int n = datas.length;
int offset = n % 8;
int m = ((n+7)/8);
if(offset != 0){
tmBlock = new byte[m*8];
System.arraycopy(datas, 0, tmBlock, 0, datas.length);
for(int i = offset;i<8;i++){
tmBlock[(m-1)*8+i] = (byte)0x00;//剩下的8-offset个字节,全部用十六进制数值0x00填充。
}
}else{
tmBlock = new byte[m*8];
System.arraycopy(datas, 0, tmBlock, 0, datas.length);
}
}else{
throw new NullPointerException("参数为空引用");
}
return tmBlock;
}
public static void main(String []args){
byte[] a = new byte[]{0,1,2,3,4,5};
ScriUtil.createRandomBytes(a);
byte[] b = ScriUtil.changeToReverse(a);
byte[] c = ScriUtil.concatBytes(b, a);
a = ScriUtil.finishBlock(c);
for(int i=0; i<a.length; i++)
System.out.println(a[i]);
/*System.out.println("/n");
for(int i=0; i<c.length; i++)
System.out.println(c[i]);*/
}
}