仿射密码—加密、解密
2021/10/31 6:09:55
本文主要是介绍仿射密码—加密、解密,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include<iostream> #include<string> using namespace std; int GCD(int x, int y) {//求两个数的最大公因数;可改为bool类型函数,判断x,y是否为素数即可; return y == 0 ? x : GCD(y, x % y); } int find_ni(int a) {//求逆元,方法有三种; int i; for ( i = 1; (i * a - 1) % 26 != 0; i++); return i; } string encrypt(int k, int b, string message) {//加密 for (int i = 0; i < message.size(); i++) { message[i] -= 'a'; message[i] = (k * message[i] + b) % 26; message[i] = message[i] + 'a'; } return message; } string decrpty(int a, int b, string cipher) {//解密 int s = find_ni(a); for (int i = 0; i < cipher.size(); i++) { cipher[i] -= 'a'; cipher[i] = (s*cipher[i]+(26-s)*b)%26; cipher[i] = cipher[i] + 'a'; } return cipher; } int main() { string y, str; int k, b,n=6; cout << "请输入密钥k,b:"; cin >> k >> b; while (GCD(k, b) != 1) { cout << endl << "请重新输入k,b:"; cin >> k >> b; } while (n != 0) { cout << "请选择 1-加密 2-解密 0-退出" << endl; cin >> n; switch (n) { case 1: cout << "请输入明文"; cin >> str; y = encrypt(k, b, str); cout << "This encrypt is " << y << endl; break; case 2: cout << "请输入密文"; cin >> str; y = decrpty(k, b, str); cout << "This decrypt is " << y << endl; break; } } return 0; }
文章推荐—求逆元三种方法、仿射密码原理
这篇关于仿射密码—加密、解密的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)