Vigenère密码题解——加解密一体

 

#include<bits/stdc++.h> 
using namespace std;

char m_en(char x,char y);
char m_de(char v,char y);

int main(){
	string key,val;
	int kp=0;
	getline(cin,key);
	getline(cin,val);
	for(int i=0;i<val.length();i++){
		if(kp==key.length()){
			kp=0;
		}
		val[i]=m_de(val[i],key[kp++]);
		//val[i]=m_en(val[i],key[kp++]);
	}
	cout<<val<<endl;
}

char m_en(char x,char y){
	int offset=isupper(x)?'A':'a';
	return (toupper(x)+toupper(y))%26+offset;
}

char m_de(char v,char y){
	int offset=isupper(v)?'A':'a';
	return (26+toupper(v)-toupper(y))%26+offset;
}

so,解密注释掉了,玩的时候注意kp++。

加密:保存大小写,计算坐标,限定范围,转换为对应大小写

解密:保存大小写,保证范围,转化为对应的大小写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清晨曦月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值