編程實現弗吉尼亞密碼加密和解密
要求:用戶可以輸入密鑰。
#包括
使用命名空間std
#定義MINCHAR 32
#定義CHARSUM 94
char表[CHARSUM][CHARSUM];
布爾值Init();
bool編碼(char* key,char* source,char * dest);
bool Dncode(char* key,char* source,char * dest);
int main()
{
如果(!Init())
{
cout & lt& lt"初始化錯誤!"& lt& ltendl
返回1;
}
字符鍵[256];
char str 1[256];
char str 2[256];
int操作;
while(1)
{
做
{
cout & lt& lt"請選擇壹個操作:1。加密;2.解密;-1.退出\ n ";
CIN & gt;& gt運營;
}while(操作!=-1 & amp;& amp操作!= 1。& amp操作!= 2);
if(運算== -1)
返回0;
Else if(operation == 1)//加密
{
cout & lt& lt請輸入密鑰:“;
CIN & gt;& gt關鍵;
cout & lt& lt"請輸入要加密的字符串:";
CIN & gt;& gtstr 1;
Encode(key,str1,str 2);
cout & lt& lt"加密字符串:"
}
Else if(operation == 2)//解密
{
cout & lt& lt請輸入密鑰:“;
CIN & gt;& gt關鍵;
cout & lt& lt請輸入要解密的字符串:“”;
CIN & gt;& gtstr 1;
Dncode(key,str1,str 2);
cout & lt& lt"解密的字符串:"
}
cout & lt& ltendl
}
返回0;
}
//初始化弗吉尼亞方陣
bool Init()
{
int i,j;
for(I = 0;我& ltCHARSUMi++)
{
for(j = 0;j & ltCHARSUMj++)
{
table[j]= MINCHAR+(I+j)% CHARSUM;
}
}
返回true
}
//加密
// key: key
// source:要加密的字符串。
// dest:加密的字符串。
布爾編碼(char* key,char* source,char* dest)
{
char * tempSource = source
char * tempKey = key
char * tempDest = dest
做
{
* tempDest = table[(* tempKey)-MINCHAR][(* temp source)-MINCHAR];
tempdest++;
如果(!(*(++tempKey)))
tempKey = key
} while(* temp source++);
dest[strlen(source)]= 0;
返回true
}
//解密
// key: key
// source:要解密的字符串。
// dest:解密後的字符串。
布爾Dncode(char* key,char* source,char* dest)
{
char * tempSource = source
char * tempKey = key
char * tempDest = dest
字符偏移量;
做
{
offset =(* temp source)-(* tempKey);
offset = offset & gt= 0 ?offset:offset+CHARSUM;
* tempDest = MINCHAR+offset;
tempdest++;
如果(!(*(++tempKey)))
tempKey = key
} while(* +++temp source);
dest[strlen(source)]= 0;
返回true
}