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

📄 key.java

📁 ECLIPSE 3.3工程. AES算法的应用.
💻 JAVA
字号:
public class Key {
  public Key() {
  }
  // 子密钥生成
  public String SKey(String key) {
    String S_key = "";
    S_key = key;
    return S_key;
  }
  // 子密钥生成 key 代表上一轮的密钥 Xl代表轮数
  public String SKey(String key, int Xl) {
    String S_key = "";
    if (key.length() >= 16) {
      if (Xl != 0) {
        S_key = S_Key(key, Xl);
      }
      else S_key = key;
    }
    return S_key;
  }
  // 子密钥生成 key 代表上一轮的密钥 Xl代表轮数
  private String S_Key(String key, int Xl) {
    SBox S = new SBox();
    Operator g = new Operator();
    byte[] M = new byte[4];
    int keyc = key.length() / 4;
    byte[][] SK = new byte[keyc][4];
    byte[] k = new byte[keyc];
    String S_key = "";
    g.ToByte(SK, key);
    round(k, Xl);// 子密钥的加密数组
    for (int i = 0; i <= 3; i++) {
      if (i == 0) {
        byte[] Z = F(SK[i + 3], 4);
        Y(Z);// 字节变换
        S_B(S, Z);// S-Box代换
        Z = g.XOR(SK[i], Z, k, 4);// 异或
        S_key += g.ToString(Z);
        M = F(Z, 4);
      }
      else {
        // Z = F(M, 4);
        byte[] Z = g.XOR(SK[i], M, 4);// 异或
        S_key += g.ToString(Z);
        M = F(Z, 4);
      }
    }
    return S_key;
  }
  // 子密钥的加密数组
  public void round(byte[] k, int Xl) {
    int K = 1;
    K = K << (Xl - 1);
    if (K > 255) {
      for (int i = Xl - 9; i >= 0; i--) {
        if (K > 255) {
          K = K ^ (0x011b << i);
        }
      }
      k[0] = (byte) (K);
    }
    else k[0] = (byte) (K);
  }
  // 数组复制
  public byte[] F(byte[] w, int kc) {
    byte[] Z = new byte[kc];
    for (int i = 0; i < kc; i++) {
      Z[i] = w[i];
    }
    return Z;
  }
  // S-Box代换
  public void S_B(SBox S, byte[] z) {
    for (int i = 0; i < z.length; i++) {
      z[i] = S.subByte((byte) z[i]);
    }
  }
  // 字节变换
  public void Y(byte[] z) {
    byte m = z[0];
    for (int i = 1; i < z.length; i++) {
      z[i - 1] = z[i];
    }
    z[z.length - 1] = m;
  }
}

⌨️ 快捷键说明

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