⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sbox.java

📁 ECLIPSE 3.3工程. AES算法的应用.
💻 JAVA
字号:
public class SBox {
  /*
   * 输出单字节变换的结果
   */
  public byte subByte(byte input) {
    byte c = 0x63;// 保留字
    byte b = GF_Reverse(input);// 求逆元
    byte B = 0x00;// 存放取出一个字节中的一位
    byte m = 0x00;// 转化后的字节
    for (int i = 0; i <= 7; i++) {
      B =
        (byte) (bit(b, i) ^ bit(b, (i + 4) % 8) ^ bit(b, (i + 5) % 8)
          ^ bit(b, (i + 6) % 8) ^ bit(b, (i + 7) % 8) ^ bit(c, i));
      m = setbit(m, B, i);
    }
    return m;
  }
  private byte GF_Reverse(byte k) {
    int[][] invlog = new int[16][16];
    invlog = invLog();
    int m = 0, ii = 0, jj = 0;
    byte km = 0;
    outer: for (int i = 0; i <= 15; i++) {
      for (int j = 0; j <= 15; j++) {
        if (k == 0) break outer;
        else
          if (k == (byte) invlog[i][j]) {
            m = (255 - (i * 16 + j)) % 255;
            ii = m / 16;
            jj = m % 16;
            km = (byte) invlog[ii][jj];
            break outer;
          }
      }
    }
    return km;
  }
  private int[][] invLog() {
    int[][] invlog = new int[16][16];
    invlog[0][0] = 0;
    for (int i = 0; i <= 15; i++) {
      for (int j = 0; j <= 15; j++) {
        if (i != 0 && j == 0) invlog[i][j] = l(invlog[i - 1][j + 15]);
        else
          if (i == 0 && j == 0) invlog[0][0] = 1;
          else invlog[i][j] = l(invlog[i][j - 1]);
      }
    }
    return invlog;
  }
  private int l(int a) {
    int m = a;
    int s = a << 1;
    s = (m ^ s);
    if (s > 255) {
      s = s ^ (int) 283;
    }
    return s;
  }
  private byte setbit(byte m, byte B, int i) {
    if (B == 1) {
      if (i == 1) m = (byte) (m | 0x02);
      if (i == 2) m = (byte) (m | 0x04);
      if (i == 3) m = (byte) (m | 0x08);
      if (i == 4) m = (byte) (m | 0x10);
      if (i == 5) m = (byte) (m | 0x20);
      if (i == 6) m = (byte) (m | 0x40);
      if (i == 7) m = (byte) (m | 0x80);
      if (i == 0) m = (byte) (m | 0x01);
    }
    return m;
  }
  private byte bit(byte bt, int i) {
    byte m = 0x00;
    if (i == 1) m = (byte) (bt & 0x02);
    if (i == 2) m = (byte) (bt & 0x04);
    if (i == 3) m = (byte) (bt & 0x08);
    if (i == 4) m = (byte) (bt & 0x10);
    if (i == 5) m = (byte) (bt & 0x20);
    if (i == 6) m = (byte) (bt & 0x40);
    if (i == 7) m = (byte) (bt & 0x80);
    if (i == 0) m = (byte) (bt & 0x01);
    if (m != 0) {
      m = 0x01;
    }
    if (m == 0) {
      m = 0x00;
    }
    return m;
  }
  public static void main(String[] args) {
    SBox S = new SBox();
    System.out.println(Integer.toHexString(S.subByte((byte) 0x80)));
  }
  public byte invSubByte(byte b) {
    return 0;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -