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

📄 subkey.java

📁 DSS数字签名
💻 JAVA
字号:
package encryption;


public class SubKey {
  private String inKey;
  private StringBuffer keyBuf;
  private byte[] key=new byte[64];  //保存密钥的64位二进制表示
  private byte[] kwork=new byte[56];
  private static byte[] shift={1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 };
  protected byte[] k1=new byte[48];
  protected byte[] k2=new byte[48];
  protected byte[] k3=new byte[48];
  protected byte[] k4=new byte[48];
  protected byte[] k5=new byte[48];
  protected byte[] k6=new byte[48];
  protected byte[] k7=new byte[48];
  protected byte[] k8=new byte[48];
  protected byte[] k9=new byte[48];
  protected byte[] k10=new byte[48];
  protected byte[] k11=new byte[48];
  protected byte[] k12=new byte[48];
  protected byte[] k13=new byte[48];
  protected byte[] k14=new byte[48];
  protected byte[] k15=new byte[48];
  protected byte[] k16=new byte[48];
  protected byte[] kn=new byte[48];

  public SubKey(String inKey) {
        byte j;
        this.inKey=inKey;
        int len=inKey.length();
        //密钥必须是8位,若小于8位不够的补空格 ,大于8位取前8位
        keyBuf=new StringBuffer(inKey);
        if (len<8){
                for (int i = 1; i<=8-len; i++)
                        keyBuf.append("?");
        }
        inKey=keyBuf.toString();
        //将8个字符的密钥转换成64位二进制表示
        for (int i = 0; i<8; i++) {
                j=(byte)(inKey.charAt(i));
                key[8*i]=(byte)((j/128)%2);
                key[8*i+1]=(byte)((j/64)%2);
                key[8*i+2]=(byte)((j/32)%2);
                key[8*i+3]=(byte)((j/16)%2);
                key[8*i+4]=(byte)((j/8)%2);
                key[8*i+5]=(byte)((j/4)%2);
                key[8*i+6]=(byte)((j/2)%2);
                key[8*i+7]=(byte)(j%2);
        }
        //初始化键的排列顺序
        kwork[ 0] = key[56];
        kwork[ 1] = key[48];
        kwork[ 2] = key[40];
        kwork[ 3] = key[32];
        kwork[ 4] = key[24];
        kwork[ 5] = key[16];
        kwork[ 6] = key[ 8];
        kwork[ 7] = key[ 0];
        kwork[ 8] = key[57];
        kwork[ 9] = key[49];
        kwork[10] = key[41];
        kwork[11] = key[33];
        kwork[12] = key[25];
        kwork[13] = key[17];
        kwork[14] = key[ 9];
        kwork[15] = key[ 1];
        kwork[16] = key[58];
        kwork[17] = key[50];
        kwork[18] = key[42];
        kwork[19] = key[34];
        kwork[20] = key[26];
        kwork[21] = key[18];
        kwork[22] = key[10];
        kwork[23] = key[ 2];
        kwork[24] = key[59];
        kwork[25] = key[51];
        kwork[26] = key[43];
        kwork[27] = key[35];
        kwork[28] = key[62];
        kwork[29] = key[54];
        kwork[30] = key[46];
        kwork[31] = key[38];
        kwork[32] = key[30];
        kwork[33] = key[22];
        kwork[34] = key[14];
        kwork[35] = key[ 6];
        kwork[36] = key[61];
        kwork[37] = key[53];
        kwork[38] = key[45];
        kwork[39] = key[37];
        kwork[40] = key[29];
        kwork[41] = key[21];
        kwork[42] = key[13];
        kwork[43] = key[ 5];
        kwork[44] = key[60];
        kwork[45] = key[52];
        kwork[46] = key[44];
        kwork[47] = key[36];
        kwork[48] = key[28];
        kwork[49] = key[20];
        kwork[50] = key[12];
        kwork[51] = key[ 4];
        kwork[52] = key[27];
        kwork[53] = key[19];
        kwork[54] = key[11];
        kwork[55] = key[ 3];

        /* 开始计算子键*/
        byte nbrofshift;
        byte temp1,temp2;
        for (int iter = 0; iter<16; iter++) {
                nbrofshift = shift[iter];
                for (int i = 0; i < (int) nbrofshift; i++) {
                        temp1 = kwork[0];
                        temp2 = kwork[28];
                        for (int k = 0; k < 27; k++) {
                                kwork[k] = kwork[k+1];
                                kwork[k+28] = kwork[k+29];
                        }
                        kwork[27] = temp1;
                        kwork[55] = temp2;
                }
                /* Permute kwork - PC2 */
                kn[ 0] = kwork[13];
                kn[ 1] = kwork[16];
                kn[ 2] = kwork[10];
                kn[ 3] = kwork[23];
                kn[ 4] = kwork[ 0];
                kn[ 5] = kwork[ 4];
                kn[ 6] = kwork[ 2];
                kn[ 7] = kwork[27];
                kn[ 8] = kwork[14];
                kn[ 9] = kwork[ 5];
                kn[10] = kwork[20];
                kn[11] = kwork[ 9];
                kn[12] = kwork[22];
                kn[13] = kwork[18];
                kn[14] = kwork[11];
                kn[15] = kwork[ 3];
                kn[16] = kwork[25];
                kn[17] = kwork[ 7];
                kn[18] = kwork[15];
                kn[19] = kwork[ 6];
                kn[20] = kwork[26];
                kn[21] = kwork[19];
                kn[22] = kwork[12];
                kn[23] = kwork[ 1];
                kn[24] = kwork[40];
                kn[25] = kwork[51];
                kn[26] = kwork[30];
                kn[27] = kwork[36];
                kn[28] = kwork[46];
                kn[29] = kwork[54];
                kn[30] = kwork[29];
                kn[31] = kwork[39];
                kn[32] = kwork[50];
                kn[33] = kwork[44];
                kn[34] = kwork[32];
                kn[35] = kwork[47];
                kn[36] = kwork[43];
                kn[37] = kwork[48];
                kn[38] = kwork[38];
                kn[39] = kwork[55];
                kn[40] = kwork[33];
                kn[41] = kwork[52];
                kn[42] = kwork[45];
                kn[43] = kwork[41];
                kn[44] = kwork[49];
                kn[45] = kwork[35];
                kn[46] = kwork[28];
                kn[47] = kwork[31];

                switch(iter){
                        case 0:
                                for (int k = 0; k<48;k++) { k1[k]=kn[k]; }
                                break;
                        case 1:
                                for (int k = 0; k<48;k++) { k2[k]=kn[k]; }
                                break;
                        case 2:
                                for (int k = 0; k<48;k++) { k3[k]=kn[k]; }
                                break;
                        case 3:
                                for (int k = 0; k<48;k++) { k4[k]=kn[k]; }
                                break;
                        case 4:
                                for (int k = 0; k<48;k++) { k5[k]=kn[k]; }
                                break;
                        case 5:
                                for (int k = 0; k<48;k++) { k6[k]=kn[k]; }
                                break;
                        case 6:
                                for (int k = 0; k<48;k++) { k7[k]=kn[k]; }
                                break;
                        case 7:
                                for (int k = 0; k<48;k++) { k8[k]=kn[k]; }
                                break;
                        case 8:
                                for (int k = 0; k<48;k++) { k9[k]=kn[k]; }
                                break;
                        case 9:
                                for (int k = 0; k<48;k++) { k10[k]=kn[k]; }
                                break;
                        case 10:
                                for (int k = 0; k<48;k++) { k11[k]=kn[k]; }
                                break;
                        case 11:
                                for (int k = 0; k<48;k++) { k12[k]=kn[k]; }
                                break;
                        case 12:
                                for (int k = 0; k<48;k++) { k13[k]=kn[k]; }
                                break;
                        case 13:
                                for (int k = 0; k<48;k++) { k14[k]=kn[k]; }
                                break;
                        case 14:
                                for (int k = 0; k<48;k++) { k15[k]=kn[k]; }
                              break;
                        case 15:
                                for (int k = 0; k<48;k++) { k16[k]=kn[k]; }
                                break;
                }
        }
  }
}

⌨️ 快捷键说明

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