JAVA编程:Rabbit流密码的Java实现
来源:优易学  2011-9-29 12:43:46   【优易学:中国教育考试门户网】   资料下载   IT书店

 

 public void getS(byte[] p_dest, long data_size)

  {

  int i, j, m;

  int[] k = new int[4];

  byte[] t = new byte[4];

  for( i = 0; i < data_size; i+=16)

  {

  next_state();

  k[0] = x[0] ^ ( x[5] >>> 16 ) ^ ( x[3] << 16 );

  k[1] = x[2] ^ ( x[7] >>> 16 ) ^ ( x[5] << 16 );

  k[2] = x[4] ^ ( x[1] >>> 16 ) ^ ( x[7] << 16 );

  k[3] = x[6] ^ ( x[3] >>> 16 ) ^ ( x[1] << 16 );

  for( j = 0; j < 4; j++)

  {

  t = i2osp(k[j]);

  for( m = 0; m < 4; m++)

  {

  p_dest[ j * 4 + m ] = t[m];

  }

  }

  }

  }

  /**

  * @declaration加密和解密函数

  * @param p_src 需要加密或解密的消息,其长度必须是16的倍数,以字节为单位,*若不是16的倍数,则需要在调用该函数前进行填充,一般填充值

  *为0的字节

  * @param p_dest 加密或解密的结果,其长度必须是16的倍数,以字节为单位

  *并且长度必须大于等于p_src的长度

  * @param data_size 需要处理的消息的长度,必须是16的倍数,以字节为单位

  *其值为p_src的长度

  */

  public void cipher(byte[] p_src, byte[] p_dest, long data_size)

  {

  int i, j, m;

  int[] k = new int[4];

  byte[] t = new byte[4];

  for( i = 0; i < data_size; i+=16)

  {

  next_state();

  k[0] = os2ip(p_src, i * 16 + 0) ^ x[0] ^ ( x[5] >>> 16 ) ^ ( x[3] << 16 ); k[1] = os2ip(p_src, i * 16 + 4) ^ x[2] ^ ( x[7] >>> 16 ) ^ ( x[5] << 16 ); k[2] = os2ip(p_src, i * 16 + 8) ^ x[4] ^ ( x[1] >>> 16 ) ^ ( x[7] << 16 ); k[3] = os2ip(p_src, i * 16 + 12) ^ x[6] ^ ( x[3] >>> 16 ) ^ ( x[1] << 16 );

  for( j = 0; j < 4; j++)

  {

  t = i2osp(k[j]);

  for( m = 0; m < 4; m++)

  {

  p_dest[ i * 16 + j * 4 + m ] = t[m];

  }

  }

  }

  }

  }

  public class Main {

  public static void main(String[] args) {

  /**

  * 定义测试密钥key,需要注意的是,由于java没有unsigned类型,* 所以需要对大于等于0x80的字节进行类型转换,

  *比较方便的办法是都加上(byte)

  */

  byte[] key = {

  (byte)0xa0, (byte)0x33, (byte)0xd6, (byte)0x78, (byte)0x6b, (byte)0x05, (byte)0x14, (byte)0xac, (byte)0xfc, (byte)0x3d, (byte)0x8e, (byte)0x2d, (byte)0x6a, (byte)0x2c, (byte)0x27, (byte)0x1d

  };

  /**

  * 定义待加密的消息message,密文ciphertext,并初始化为0

  */

  byte[] message = new byte[16];

  byte[] ciphertext = new byte[16];

  for( int i = 0; i < 16; i++)

  {

  message[i] = (byte)i;

  ciphertext[i] = 0;

  }

上一页  [1] [2] [3] [4] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训