[Cryptography principle and practice] DES constructs sub-key symbol java code implementation

The code is actually relatively simple, the most important thing is to read the book carefully and understand the process well.

package com.slp.cryptography.des;

/**
 * @ClassName DesSubKey
 * @Description TODO
 * @Author sanglp
 * @Date 2021/1/11 13:18
 * @Version 1.0
 **/
public class DesSubKey {
    
    
    public static void main(String[] args) {
    
    
        int a[] = {
    
    0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1};
        int b[] = new int[56], i, j, n, t, x, y;
        int C[] = new int[56];
        int D[] = new int[56];
        int k[] = new int[56];
        //进行第一轮置换
        b[0] = a[56];
        b[1] = a[48];
        b[2] = a[40];
        b[3] = a[32];
        b[4] = a[24];
        b[5] = a[16];
        b[6] = a[8];
        b[7] = a[0];
        b[8] = a[57];
        b[9] = a[49];
        b[10] = a[41];
        b[11] = a[33];
        b[12] = a[25];
        b[13] = a[17];
        b[14] = a[9];
        b[15] = a[1];
        b[16] = a[58];
        b[17] = a[50];
        b[18] = a[42];
        b[19] = a[34];
        b[20] = a[26];
        b[21] = a[18];
        b[22] = a[10];
        b[23] = a[2];
        b[24] = a[59];
        b[25] = a[51];
        b[26] = a[43];
        b[27] = a[35];
        b[28] = a[62];
        b[29] = a[54];
        b[30] = a[46];
        b[31] = a[38];
        b[32] = a[30];
        b[33] = a[22];
        b[34] = a[14];
        b[35] = a[6];
        b[36] = a[61];
        b[37] = a[53];
        b[38] = a[45];
        b[39] = a[37];
        b[40] = a[29];
        b[41] = a[21];
        b[42] = a[13];
        b[43] = a[5];
        b[44] = a[60];
        b[45] = a[52];
        b[46] = a[44];
        b[47] = a[36];
        b[48] = a[28];
        b[49] = a[20];
        b[50] = a[12];
        b[51] = a[4];
        b[52] = a[27];
        b[53] = a[19];
        b[54] = a[11];
        b[55] = a[3];
        // for(i=0;i<56;i++)
        // {
    
    
        //printf("%d ",b[i]);
        //}
        //printf("\n");
        //输出C0 D0
        System.out.print("C0=");
        for (i = 0; i < 28; i++) {
    
    
            C[i] = b[i];
            if (i % 4 == 0) {
    
    
                System.out.print("  ");
            }
            System.out.print(C[i]);
        }
        System.out.print("\nD0=");
        for (i = 28; i < 56; i++) {
    
    
            D[i - 28] = b[i];
            if (i % 4 == 0) {
    
    
                System.out.print("  ");
            }
            System.out.print(D[i - 28]);
        }
        System.out.print("\n\n");

        //置换16次
        for (j = 1; j <= 16; j++) {
    
    
            System.out.println("第"+j+"次子秘钥");
            if (j == 1 || j == 2 || j == 9 || j == 16) {
    
    
                n = C[0];
                t = D[0];
                for (i = 0; i < 27; i++) {
    
    
                    C[i] = C[i + 1];
                    D[i] = D[i + 1];
                }
                C[27] = n;
                D[27] = t;
            } else {
    
    
                n = C[1];
                t = C[0];
                x = D[1];
                y = D[0];
                for (i = 0; i < 26; i++) {
    
    
                    C[i] = C[i + 2];
                    D[i] = D[i + 2];
                }
                C[27] = n;
                C[26] = t;
                D[27] = x;
                D[26] = y;
            }
            for (i = 0; i < 28; i++) {
    
    
                if (i % 4 == 0) {
    
    
                    System.out.print("  ");
                }
                System.out.print(C[i]);
            }
            System.out.print("\n");
            for (i = 0; i < 28; i++) {
    
    
                if (i % 4 == 0) {
    
    
                    System.out.print("  ");
                }
                System.out.print(D[i]);

            }
            System.out.print("\n");

            for (i = 0; i < 28; i++) {
    
    
                b[i] = C[i];
            }
            for (i = 28; i < 56; i++) {
    
    
                b[i] = D[i - 28];
            }
            k[0] = b[13];
            k[1] = b[16];
            k[2] = b[10];
            k[3] = b[23];
            k[4] = b[0];
            k[5] = b[4];
            k[6] = b[2];
            k[7] = b[27];
            k[8] = b[14];
            k[9] = b[5];
            k[10] = b[20];
            k[11] = b[9];
            k[12] = b[22];
            k[13] = b[18];
            k[14] = b[11];
            k[15] = b[3];
            k[16] = b[25];
            k[17] = b[7];
            k[18] = b[15];
            k[19] = b[6];
            k[20] = b[26];
            k[21] = b[19];
            k[22] = b[12];
            k[23] = b[1];
            k[24] = b[40];
            k[25] = b[51];
            k[26] = b[30];
            k[27] = b[36];
            k[28] = b[46];
            k[29] = b[54];
            k[30] = b[29];
            k[31] = b[39];
            k[32] = b[50];
            k[33] = b[44];
            k[34] = b[32];
            k[35] = b[47];
            k[36] = b[43];
            k[37] = b[48];
            k[38] = b[38];
            k[39] = b[55];
            k[40] = b[33];
            k[41] = b[52];
            k[42] = b[45];
            k[43] = b[41];
            k[44] = b[49];
            k[45] = b[35];
            k[46] = b[28];
            k[47] = b[31];
            for (i = 0; i < 48; i++) {
    
    
                if (i % 4 == 0) {
    
    
                    System.out.print(" ");
                }
                System.out.print(k[i]);
            }
            System.out.print("\n");
            System.out.print("\n");
        }
    }
}

Search [Zixin] on WeChat or scan the QR code below to make friends and make progress together. The article is continuously updated. At present, I am organizing the study notes of Python hundred battles, and I look forward to more updates in the future.
Insert picture description here

Guess you like

Origin blog.csdn.net/weixin_51656605/article/details/112512608