• 转轮加密机 加解密 (C语言实现)


    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>


    const int lowRol[2][26] = { {2425261234567891011121314151617181920212223 } ,
                            { 213151191014262081616722411517912212223242526} };
    const int midRol[2][26] = { {2623456789101112131415161718192021222324251} ,
                        { 20,16415314122351622219111825241371082192617} };
    const int fastRol[2][26] = { {1234567891011121314151617181920212223242526} ,
                        { 8261720,22,103131142352491225161961521271414} };

    // 实现转轮功能
    void m_change(int word[2][26]) {
        int temp_a, temp_b;
        int i;
        temp_a = word[0][0];
        temp_b = word[1][0];
        for (i = 0; i < 25; i++) {
            word[0][i] = word[0][i + 1];
            word[1][i] = word[1][i + 1];
        }
        word[0][25] = temp_a;
        word[1][25] = temp_b;
    }
    void get_ciper(char text[100], char output[100], int lowrol[2][26], int midrol[2][26], int fastrol[2][26]) {
        int i;
        int fcnt = 0int mcnt = 0;
        int input_i, low_flag, mid_flag, fast_flag;
        
        //第一层循环 ,遍历全部的字符
        for (i = 0; i < strlen(text); i++) {
            input_i = (int)(text[i] - 97);
            if (text[i] == ''break;
            //慢轮
            for (low_flag = 0; low_flag < 26; low_flag++) {
                if (lowrol[1][low_flag] == lowrol[0][input_i]) break;
            }
            // 中轮
            for (mid_flag = 0; mid_flag < 26; mid_flag++) {
                if (midrol[1][mid_flag] == midrol[0][low_flag]) break;
            }
            // 快轮
            for (fast_flag = 0; fast_flag < 26; fast_flag++) {
                if (fastrol[1][fast_flag] == fastRol[0][mid_flag]) break;
            }
            // 快轮转动
            fcnt++;
            // 中轮
            if (fcnt % 26 == 0) {
                mcnt++;
                m_change(midrol);
            }

            //慢轮
            if (mcnt % 26 == 0) {
                m_change(lowrol);
            }
            
            //保存加密字符串
            output[i] = (char)(fast_flag + 96);
            //putchar((char)(fast_flag + 96));
        }

        // 维持字符串格式
        output[i] = '';
    }

    void get_plain(char text[100], char output[100], int lowrol[2][26], int midrol[2][26], int fastrol[2][26]) {
        int i;
        int fcnt = 0int mcnt = 0;
        int input_i, low_flag, mid_flag, fast_flag;

        //第一层循环 ,遍历全部的字符
        for (i = 0; i < strlen(text); i++) {
            input_i = (int)(text[i] - 97);
            if (text[i] == ''break;
            //快轮
            for (fast_flag = 0; fast_flag < 26; fast_flag++) {
                if (lowrol[1][fast_flag] == lowrol[0][input_i]) break;
            }
            // 中轮
            for (mid_flag = 0; mid_flag < 26; mid_flag++) {
                if (midrol[1][mid_flag] == midrol[0][fast_flag]) break;
            }
            // 慢轮
            for (low_flag = 0; low_flag < 26; low_flag++) {
                if (fastrol[1][low_flag] == fastRol[0][mid_flag]) break;
            }
            // 快轮转动
            fcnt++;
            // 中轮
            if (fcnt % 26 == 0) {
                mcnt++;
                m_change(midrol);
            }

            //慢轮
            if (mcnt % 26 == 0) {
                m_change(lowrol);
            }

            //保存加密字符串
            output[i] = (char)(low_flag + 97);
            //putchar((char)(low_flag + 97));
        }

        // 维持字符串格式
        output[i] = '';
    }




    int main() {
        char alphabet[26] = "abcdefghijklmnopqrstuvwxyz";
        
        int fcnt =0, mcnt = 0;
        int i;
        char user_input[100] = { 0 };
        char user_output[100] = { 0 };
        char get_user_input[100] = { 0 };
        int temp_low[2][26], temp_mid[2][26], temp_fast[2][26];
        memcpy(temp_low, lowRol, sizeof(lowRol));
        memcpy(temp_mid, midRol, sizeof(midRol));
        memcpy(temp_fast, fastRol, sizeof(fastRol));

        scanf("%s", user_input);


        get_ciper(user_input, user_output, temp_low, temp_mid, temp_fast);
        printf("%s", user_output);
        printf("密文是: ");


        //恢复被更改的轮的顺序
        memcpy(temp_low, lowRol, sizeof(lowRol));
        memcpy(temp_mid, midRol, sizeof(midRol));
        memcpy(temp_fast, fastRol, sizeof(fastRol));
        get_plain(user_output, get_user_input, temp_low, temp_mid, temp_fast);
        printf("解密是:%s", user_input);
        printf(" ");

        //printf("%s", user_input);
        return 0;
    }
  • 相关阅读:
    中型PLC运控快速入门系列教程------第3节 编程语法样例讲解
    中型PLC运控快速入门系列教程------第2节 常用数据类型及变量介绍
    中型PLC运控快速入门系列教程------第1节 学习指南资料介绍
    Inoproshop入门系列教程-----第11节 中型PLC常用快捷方式介绍
    Inoproshop入门系列教程-----第10节 程序安全加密和解锁
    Inoproshop入门系列教程-----第9节 变量关联IO和掉电保持
    Inoproshop入门系列教程-----第8节 中型PLC固件升级方式
    Inoproshop入门系列教程-----第7节 库文件的安装及设备文件的导入
    Inoproshop入门系列教程-----第6节 通信等组态配置介绍
    Inoproshop入门系列教程-----第5节 流水灯样例快速编程上手
  • 原文地址:https://www.cnblogs.com/wangyv/p/12528196.html
Copyright © 2020-2023  润新知