移位密码又称为移位代换密码,是单表代换密码的一种。
#include <iostream>
#include <fstream>
#include <cstdlib>

/* run this program using the console pauser&nbs***bsp;add your own getch, system("pause")&nbs***bsp;input loop */
using namespace std;
void encryption(ifstream& fin, ofstream& fout, int n);
void decryption(ifstream& fin, ofstream& fout, int n);

int main(int argc, char** argv) {
	// 加密 
	ifstream fin;
    ofstream fout;

	fin.open("file1_2.in");
    if(fin.fail())
    {
        cout<<"File open error!(Input)"<< endl;
        exit (1) ;
    }
    fout.open("file1_2.out");
    if(fout.fail()){
        cout<<"File open error!(Outpot)"<< endl;
    }
    encryption(fin, fout, 20);
    fin.close();
    fout.close();
    
    // 解密 
	ifstream fin_de;
    ofstream fout_de;

	fin_de.open("file1_2.out");
    if(fin_de.fail())
    {
        cout<<"File open error!(Input)"<< endl;
        exit (1) ;
    }
    fout_de.open("file1_2_de.out");
    if(fout_de.fail()){
        cout<<"File open error!(Outpot)"<< endl;
    }
    decryption(fin_de, fout_de, 20);
    fin_de.close();
    fout_de.close();
	
	return 0;
}


void encryption(ifstream& fin, ofstream& fout, int n){
	char next;
	while(fin.get(next)){
		fout<<char((int(next)+n)%128);
	}
}

void decryption(ifstream& fin, ofstream& fout, int n){
	char next;
	while(fin.get(next)){
		fout<<char((int(next)-n)%128);
	}
}