维吉尼亚密码加密文件

一.维吉尼亚密码加密文本文件

要求:
用维吉尼亚密码实 现加密任意文本文件,注意用控制台方式实现。
输入格式:
>-e/-d key filename (key为一个单词,或者一串字符串)

代码:
// Console-维吉尼亚加密文本
//2015-10-4
#include 
#include 
#include 
#include 

using namespace std;

//void encrypt (string, ifstream);
//void decrypt (string, ofstream);

int main(int argc, char *argv[])
{
    if (argc != 4)//处理输入指令,输入有误,返回提示
    {
        //QIUT for wrong input
        cout << "wrong input!" << endl;
        exit(EXIT_FAILURE);
    }

    //for (int i = 0; i= 97 && key[i] < 122)
            key[i] = key[i] - 32;
    }
    if (et != string::npos && dt == string::npos) //加密文件
    {
        //定义文件指针
        ifstream fin(filename);
        ofstream fout("foe.txt", ios_base::out | ios_base::trunc); //文件打开方式为清除原有数据,重新天填入
        while (fin.get(temp))
        {
            for (;;)
            {
                if (temp >= 65 && temp <= 90)
                {
                    temp = (((temp - 65) + (key[j] - 65)) % 26 + 97);
                    fout << temp;
                }
                else if (temp >= 97 && temp <= 122)
                {
                    temp = (((temp - 97) + (key[j] - 65)) % 26 + 65);
                    fout << temp;
                }
                else
                    fout << temp;;
                j = (j + 1) % klen;
                break;

            }
        }
        fin.close();//关闭文件指针
        fout.close();
    }
    else if (et == string::npos && dt != string::npos) //解密文件
    {
        ifstream fin(filename);
        ofstream fout("fod.txt", ios_base::out | ios_base::trunc);

        while (fin.get(temp))
        {
            for (;;)
            {
                if (temp >= 65 && temp <= 90)
                {
                    temp = (((temp - 65 + 26) - (key[j] - 65)) % 26 + 97);
                    fout << temp;
                }
                else if (temp >= 97 && temp <= 122)
                {
                    temp = (((temp - 97 + 26) - (key[j] - 65)) % 26 + 65);
                    fout << temp;
                }
                else
                    fout << temp;
                j = (j + 1) % klen;
                break;

            }
        }
        fin.close();
        fout.close();
    }
    else
    {
        cout << "no find :-e or -d" << endl; //没有找到加密加密指令,返回错误信息
        exit(EXIT_FAILURE);
    }
    return 0;
}

二.维吉尼亚密码加密任意类型文件

要求:

用维吉尼亚密码加密任意类型的文件,用控制台方式实现。

代码:
// Console维吉尼亚加密任意文件
//2015-10-4

#include 
#include   //文件流
#include   //string型操作
#include  //读取写入二进制数据
#include  //为生成临时文件名

using namespace std;

int main(int argc, char *argv[])
{
    if (argc != 4)
    {
        //输入有错时返回提示信息并结束程序
        cout << "输入指令错误,请确认输入格式为:exeFileName '-e'or'-d' keyword FileName" << endl;
        exit(EXIT_FAILURE);
    }

    //for (int i = 0; i

你可能感兴趣的:(维吉尼亚密码加密文件)