分类：电脑/网络-程序设计-C/C++
问题：设明文P=P0P1P2···Pn和密钥K=K0K1K2···Km? 
设明文P=P0P1P2···Pn和密钥K=K0K1K2···Km(n>=m)中的字符Pi(1<=i<=n)或Kj(1<=j<=m)的ASII为00--7FH，用密钥K对明文P进行加密得到密文C=C0C1C1···Cn，用密钥K对密文C解密得到明文P。加密Ci=Pi+Kj(j=i mod(m+1)) (当Ci<=7FH)    Ci=Pi+Kj-80H(j=i mod(m+1))  (当C>7FH)解密    Pi=Ci-Kj (j=i mod(m+1)) (当Ci>=Kj)    P设明文P=P0P1P2···Pn和密钥K=K0K1K2···Km(n>=m)中的字符Pi(1<=i<=n)或Kj(1<=j<=m)的ASII为00--7FH，用密钥K对明文P进行加密得到密文C=C0C1C1···Cn，用密钥K对密文C解密得到明文P。加密Ci=Pi+Kj(j=i mod(m+1)) (当Ci<=7FH)    Ci=Pi+Kj-80H(j=i mod(m+1))  (当C>7FH)解密    Pi=Ci-Kj (j=i mod(m+1)) (当Ci>=Kj)    Pi=Ci-Kj+80H(j=i mod(m+1))(当Ci<kj)
回答：#include "tream"using namespace std;#define N 5 //定义N的大小#define M 5 //定义M的大小//M>=M//以下程序在Visual C++.NET 2003通过！int main(){  char P[N]={0};  char K[M]={0};  char C[M]={0};  //因为要用Ki加密，所以C[]只能有M个大  int i,j,cnt;//定义循环变量  for (i=0;i<N;i++)//为P[N]赋值  {    cout <<"Please input the "<<i+1<<" SRC ' Be able to input the '"<<N<<" 'Length'"<<endl;    cin >>P[i];  }  for (j=0;j<M;j++)//为K[M]赋值  {    cout <<"Please input the "<<j+1<<" KEY ' Be able to input the '"<<N<<" 'Length'"<<endl;    cin >>K[j];  }  for (cnt=0;cnt<M;cnt++)//加密！因为K[j]个数有限，只能用M做为循环次数  {    if (P[cnt]<=127)//7F=127    {      C[cnt]=P[cnt]+K[N%(M+1)];//Ci=Pi+Kj(j=i mod(m+1))  (当Pi<=7FH)，你写的Ci我认为你写错了，因为这个结果是对的！     }    else    {      C[cnt]=P[cnt]+K[N%(M+1)]-128;//Ci=Pi+Kj-80H(j=i mod(m+1)) (当Pi>7FH)    }  }  for (cnt=0;cnt<=40;cnt++)    cout <<"#";  cout <<endl;  for (cnt=0;cnt<M;cnt++)//输出加密后的C[i]  {    cout <<C[cnt]<<endl;  }  for (cnt=0;cnt<M;cnt++)//解密！因为K[j]个数有限，只能用M做为循环次数  {    if (C[cnt]<=K[cnt])    {      P[cnt]=C[cnt]-K[N%(M+1)];//Pi=Ci-Kj (j=i mod(m+1)) (当Ci>=Kj)    }    else    {      P[cnt]=C[cnt]-K[N%(M+1)]+128;//80H=128，Pi=Ci-Kj+80H(j=i mod(m+1))(当Ci<Kj)    }  }  for (cnt=0;cnt<=40;cnt++)    cout <<"#";  cout <<endl;  for (cnt=0;cnt<M;cnt++)//输出解密后的P[i]  {    cout <<P[cnt]<<endl;  }  for (cnt=0;cnt<=40;cnt++)    cout <<"#";  cout <<endl;  //以下是程序阻止DOS系统直接退出！  int delay;  cout <<"Input a Number And Press Enter key to Exit";  cin >>delay;         return 0;}