admin管理员组文章数量:1574959
最近学习了密码学的PlayFair密码,于是我就用了C++语言将其写了出来,有些地方肯定用C语言里的数组只是更方便些,但是我为了巩固自己的C++知识,有些地方故意用了C++里面的东西,可能比较复杂!!
#include<iostream>
#include<vector>
#include<utility>
#include <algorithm>
#include<iterator>
#include<map>
#include<list>
#include<deque>
#include<string>
#define len ('a'-'A')
using namespace std;
class PlayFair
{
private:
char word;
vector<char> key_vec;
pair<int,int> ipar;
map<pair<int,int>,char> key_map;
deque<char> plaintext_En;
deque<char> plaintext_De;
deque<char> ciphertext_En;
deque<char> ciphertext_De;
public:
void Encryption();
void Decryption();
void Key();
};
void PlayFair::Key()
{
key_vec.clear();
key_map.clear();
cout<<"Please input the defult insertor: ";
cin>>word;
if(word>='a'&&word<='z') word-=len;
if(word == 'J') word = 'I';
char ch;
cout<<"Please input the key(Crtl+d to stop): ";
while(cin>>ch)
{
if(ch>'z'||ch<'A'||(ch>'Z'&&ch<'a')) continue;
if(ch>='a'&&ch<='z') ch-=len;
if(ch=='J') ch = 'I';
vector<char>::iterator iter = find(key_vec.begin(),key_vec.end(),ch);
if(key_vec.end()==iter)
key_vec.push_back(ch);
}
// cout<<key.size()<<endl;
for(char c='A';c<='Z';c++)
{
if(c=='j'||c=='J') continue;
vector<char>::iterator iter = find(key_vec.begin(),key_vec.end(),c);
if(key_vec.end()==iter)
key_vec.push_back(c);
}
int count=0;
cout<<"密钥的5*5的矩阵为:"<<endl;
vector<char>::iterator iter = key_vec.begin();
while(iter!=key_vec.end())
{
if(count%5==0&&count>0)
cout<<endl;
cout<<*iter++;
count++;
}
iter = key_vec.begin();
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
{
ipar = make_pair(i,j);
key_map.insert
版权声明:本文标题:用c++写的PlayFair密码的加密与解密算法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1727782076a1129415.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论