大家好,还是我!
这里是续上篇的内容继续来教大家完成PlayFair这个密码算法!
上次讲到了完成PF表的建立,那么已经可以利用它对明文进行加密了——或者是对密文进行解密。
由于对明文加密多了一道明文预处理的工序,所以我们先讲解密文加密
step2.1:对密文解密
- 我们完全可以想象得到,这个解密函数(pfDeCrePtion)应该是酱紫的:
void pfdcp(string et, string pf[5][5] , int alp[3][26] , string nct[])
也就是至少需要密文(EncriptionText)、pf表、字母表 以及得到的 新明文(NewClearText) 作为参数 首先要分组遍历明文,显然只要我们一次考察密文中的两个元素即可
for(int i = 0 ; i < et.length() ; i+=2){ //将密文字母转化为对应字母表的下标 int cti1 = (int)et[i]; cti1-=97; int cti2 = (int)et[i+1]; cti2-=97; //得到这俩字母的座标,从而判断其 同行or同列or对角 int frow = alp[1][cti1], fline = alp[2][cti1]; int srow = alp[1][cti2], sline = alp[2][cti2];
接下来我们就可以根据相对位置的判断结果,将第i和i+1个明文输入到 新明文nct 中了
if(frow == srow){//同行 if(fline - sline == -1){//判断看是否黏着,还要看俩字母哪个前哪个后 nct[i] = p