您的位置:澳门402永利com > 计算机 网络 > 维吉尼亚加密

维吉尼亚加密

发布时间:2019-11-12 09:10编辑:计算机 网络浏览(93)

    C语言--getchar()的使用

    问题:

        

    编排一个前后相继,能够直接接纳键盘字符,  假设是小写字符就输出对应的大写字符,假设接受的是大写字符,就输出对应的小写字符,如果是数字不出口

     

    #include<stdio.h>
    int main()
    {
        char a;
        scanf_s("%c", &a);
        while ((a = getchar()) != EOF)
        {
            if (a >= 'a'&& a <= 'z')
            {
                printf("%c", (a - 32));
            }
            else if (a >= 'A'&& a <= 'Z')
            {
                printf("%c", (a + 32));
            }
            else if (a >= '0'&&a <= '9')
            {
                printf("");
            }
    
        }
        return 0;
    }
    

     

     

     

    难题: 编写三个主次,能够豆蔻梢头间选取键盘字符, 假若是小写字符就输出对应的大写字符,假如采纳的是大写字符,就...

    试验供给:

    兑现Virginia密码,用键盘接纳明文和密钥,荧屏打印密文和平解决密后的公然。大小写铭感,明文小写则密文大写,明文大写则密文小写。

    图片 1

    维吉妮亚替换表.jpg

    其实难点:

    接到密文的字符串少申请了一位空间,导致空中央调控制的一个bug,花了三个时辰才稳住到难点,在此以前完全未有想到是以此难题。大致正是因为少了壹人空间,招致被覆盖,然后编写翻译器帮笔者扩大了多少个字节,招致那四个字未有开首化,所以输出密文的时候背后总是有莫名其妙的字符现身。

    核心代码实现:
    ciphertext= (char*)calloc(plainlen+1, sizeof(char));
    ...
    for (int j = 0 ; j < plainlen ; j++) //加密过程
    {
    if (plaintext[j] >= 65 && plaintext[j] <= 90)
    ciphertext[j] = ((plaintext[j] - 65) + (key[j] - 65) % 26 + 97);
    else if(plaintext[j] >= 97 && plaintext[j] <= 122)
    ciphertext[j] = ((plaintext[j] - 97) + (key[j] - 65) % 26 + 65);
    else
    ciphertext[j] = plaintext[j];
    }
    
    源码:
    // 维吉尼亚密码加密-键盘接收加密解密
    //**2015-9-24**
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int array_num = 500;
    void encipher(char [], char [], char []);
    void decipher(char [], char [], char []);
    int main()
    {
        int plainlen,TEMP;              //申请原文,密文,密钥的空间并初始化
        char *plaintext,*key,*ciphertext;
        plaintext = (char*)calloc(array_num, sizeof(char));
        key = (char*)calloc(array_num, sizeof(char));
        cout << "输入密文" << endl;
        cin.getline(plaintext, array_num);
        cout << "输入key" << endl;
        cin.getline(key, array_num);
        plainlen = strlen(plaintext);
        ciphertext= (char*)calloc(plainlen+1, sizeof(char));  //密文的空间由输入明文的长度确定
        encipher(plaintext, key, ciphertext);//加密
        int cipherlen = strlen(ciphertext);
        decipher(ciphertext, key, plaintext);//解密
        system("pause");
        return 0;
    }
    void encipher(char plaintext[], char key[], char ciphertext[])
    {
        cout << "-------------------加密过程-------------------" <<           endl;
        cout <<"***原文***n"<< plaintext << endl << endl;
        char temp;
        int keylen = strlen(key);
        int plainlen = strlen(plaintext);
        for (int i = 0; i < plainlen; i++)  //处理密钥字符串全部为大写,长度和明文以及密文长度相同
        {
            if (key[i] >= 97 && (key[i] <= 122))
            {
                temp = key[i%keylen] - 32;
                key[i] = temp;
            }
            else
            key[i] = key[i%keylen];
        }
    for (int j = 0 ; j < plainlen ; j++) //加密过程
    {
        if (plaintext[j] >= 65 && plaintext[j] <= 90)
            ciphertext[j] = (((plaintext[j] - 65) + (key[j] - 65)) % 26 + 97);
        else if(plaintext[j] >= 97 && plaintext[j] <= 122)
            ciphertext[j] = (((plaintext[j] - 97) + (key[j] - 65)) % 26 + 65);
        else
            ciphertext[j] = plaintext[j];
        }
        cout <<"***密文***n"<< ciphertext << endl;
    }
    void decipher(char ciphertext[], char key[], char plaintext[])
    {
        cout << "-----------------解密过程--------------------"<<endl;
        cout << "***密文***n" << ciphertext << endl << endl;
        //cout << "***key***n" << key << endl << endl;
        int cipherlen = strlen(ciphertext);
        for (int j = 0; j < cipherlen; j++) //解密过程
        {
            if (ciphertext[j] >= 65 && ciphertext[j] <= 90)
                    plaintext[j] = (((ciphertext[j] - 65+26) - (key[j] - 65))%26 + 97);
            else if (ciphertext[j] >= 97 && ciphertext[j] <= 122)
                plaintext[j] = (((ciphertext[j] - 97+26) - (key[j] - 65))%26 + 65);
            else
                plaintext[j] = ciphertext[j];
     }
        cout << "***原文***n" << plaintext << endl;
    }
    

    本文由澳门402永利com发布于计算机 网络,转载请注明出处:维吉尼亚加密

    关键词:

上一篇:emgu图像阈值

下一篇:没有了