凯撒密码——密码学

这篇具有很好参考价值的文章主要介绍了凯撒密码——密码学。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

凯撒密码——密码学

 凯撒密码——密码学

凯撒密码——密码学

凯撒密码——密码学

凯撒密码——密码学

凯撒密码——密码学

凯撒密码——密码学

凯撒密码——密码学

凯撒密码——密码学

代码如下:文章来源地址https://www.toymoban.com/news/detail-434299.html

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<cmath>
#include<stdio.h>
using namespace std;//定义Caesar类
class Caesar {
private:
	int key;// 移位密钥
public:
	Caesar(int k) :key(k) {}//构造函数//使用移位密钥key对明文字母进行加密
	string encrypt(string cleartext) {
		string ciphertext;//加密后密文
		//自行编写一段代码,对明文区分大小写进行加密,使得最终效果与步骤截图同   
		for (int i = 0; i < cleartext.length(); i++)
		{
			// 对小写字母进行加密
			if (cleartext[i] >= 'a' && cleartext[i] <= 'z')
				ciphertext += char((cleartext[i] - 97 + this->key) % 26 + 97);
			// 对大写字母进行加密
			else if (cleartext[i] >= 'A' && cleartext[i] <= 'Z')
				ciphertext += char((cleartext[i] - 65 + this->key) % 26 + 65);
				
		}
		//返回加密后密文
		return ciphertext;
	}
	//使用穷举法进行破译
	vector<string>decrypt(string ciphertext)
	{
		vector<string>cleartextSet;//定义解密后的明文信息        
		//解密公式:
		//f(a) = (a + (26 - N)) mod 26//自行编写一段代码,穷举26个密钥对密文区分大 小写进行解密以此判断 明文,使得最终效果与步骤截图同
		// 密钥为0时,明密文完全相同,直接将密文串进行保存
		cleartextSet.push_back(ciphertext);
		// 将其余25个不同的密钥进行穷举及解密
		for (int i = 1; i < 26; i++)
		{
			// 用一个临时变量对解密的后的字符串进行保存
			string s;
			for (int j = 0; j < ciphertext.length(); j++)
			{
				//对密文串中的小写字母进行解密
				if (ciphertext[j] >= 'a' && ciphertext[j] <= 'z')
					s += char((ciphertext[j] - 97 +26-i) % 26 + 97);
				//对密文串中的大写字母进行解密
				else if (ciphertext[j] >= 'A' && ciphertext[j] <= 'Z')
					s += char((ciphertext[j] - 65 +26 - i) % 26 + 65);
			}
			//将字符串传入到容器中进行保存
			cleartextSet.push_back(s);
		}
		return cleartextSet;
	}
};
int main()
{
	int mode, flag = 1;
	while (flag)
	{
		cout << "---------- Caesar加解密!----------" << endl;
		cout << "请选择[1->encrypt 2->decrypt 3->exit]" << endl;
		cin >> mode;
		if (mode != 1 && mode != 2 && mode != 3)
		{
			cout << "输入错误,请重输  :[1->encrypt 2->decrypt 3->exit]" << endl;
			cin >> mode;
		}
		if (mode == 1)
		{
			int myKey;
			cout << "输入移位密钥: ";
			cin >> myKey;//输入移位密钥
			Caesar myCaesar(myKey);
			string cleartext;//待加密的明文
			string ciphertext;//加密后的密文
			cout << "输入要加密的明文: " << endl;
			getchar();
			getline(cin, cleartext);
			ciphertext = myCaesar.encrypt(cleartext);
			cout << "加密后的密文: " << endl;
			cout << ciphertext << endl;
		}
		else if (mode == 2) {
			vector<string>textset;//用于存放明文
			string ciphertext;//待解密的密文
			Caesar myCaesar(0);
			cout << "输入要解密的密文: " << endl;
			getchar();
			getline(cin, ciphertext);
			textset = myCaesar.decrypt(ciphertext);
			int k;
			for (k = 0; k < textset.size(); k++) {
				cout << "If (key mod 26) == " << k << ": " << endl;
				cout << textset[k] << endl;
			}
		}
		else {
			return 0;
		}
		cout << "是否继续加解密? [0->exit 1 or other->continue]: ";
		cin >> flag;
	}
	return 0;
}

到了这里,关于凯撒密码——密码学的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【密码学-1】一文入门非对称密码学

    本文共1932字,完成阅读约需6分钟。 犹记得2021年年初的一波区块链热潮让无数人第一次了解到了“公钥”和“私钥”的概念,那么,究竟什么是公钥私钥呢?和常见的密钥又有什么区别和联系呢?本文目的在用尽可能短的时间和简洁的语言,带你快速了解非对称密码学的基本

    2023年04月08日
    浏览(68)
  • 密码学基本原理和发展——古典密码学

      目录 1 滚筒密码 2 棋盘密码 3 凯撒密码 4 单表代换与多表代换 4.1 单表代换 4.2 多表代换         密码技术最早起源于公元前404年的希腊,此后密码大致经历了 古典密码、近代密码和现代密码三个阶段。         古典密码(公元前五世纪~19世纪末)代表性的是 滚桶密

    2024年02月05日
    浏览(35)
  • 【密码学】python密码学库pycryptodome

    记录了一本几乎是10年前的书(python绝技–用python成为顶级黑客)中过时的内容 里面提到了python标准库中自带的crypt库,经验证Python 3.12.1中并没有这个自带的库,密码学相关的库目前(2024.1.12)是一个自包含库pycryptodome,导入的是 import Crypto pypi库的页面 可以在文档中查看详

    2024年01月17日
    浏览(45)
  • 密码学基本原理和发展——近代密码学

    目录 1 密码机通信模型 2 Enigma密码机构造 3 Enigma密码机加解密过程 3.1 加密过程 3.2 解密过程 4 Enigma密码机的安全性 5 Enigma密码机破解 5.1 波兰雷耶夫斯基破解 5.2 图灵破解        近代密码一般指20世纪初~20世纪70年代期间的密码技术。20 世纪初电报的出现第一次使远距离

    2024年02月06日
    浏览(33)
  • 【密码学】量子安全的密码学算法以及原理介绍

    (1)“代数格密码套件”(CRYSTALS)包含两个密码原语Kyber和Dilithium。Kyber是一种抗适应性选择密文攻击(IND-CCA2)安全密钥封装机制,Dilithium是一种高度不可伪造性(EUF-CMA)安全数字签名算法。两种密码都是为了应对量子计算机的攻击,并且在操作过程中只需更改几个参数即

    2024年02月11日
    浏览(37)
  • 程序猿成长之路之密码学篇-密码学简介

    在阅读本文前需要了解的术语: 授权人/非授权人:授权人指获取了查看数据权限的用户,非授权人则是指未获取到权限的用户。 明文/密文:明文指没有加密的数据内容,密文是指加密后的数据内容 CIA(密码学中不是美国中情局的意思,是信息安全三要素): C-Confidentiality 机

    2024年02月04日
    浏览(28)
  • 密码学:公钥密码.(非对称密码)

    公钥密码 (Public Key Cryptography),又称为 非对称密码 ,其最大特征是 加密和解密不再使用相同的密钥 ,而使用不同的密钥。使用者会将一个密钥公开,而将另一个密钥私人持有,这时这两个密钥被称为 公钥和私钥 。一般来说,公钥和私钥是难以互相计算的,但它们可以互相

    2024年02月03日
    浏览(40)
  • 密码学复习-2 分组密码

    分组密码:将一个明文块作为一个整体来处理,并用来产出等长的密文块的一种密码。 流密码:对数字流一次加密一位或者一个字节的密码。 Feistel建议使用乘积密码的概念来逼近理想分组密码。 乘积密码:是指依次使用两个或两个以上的基本密码,所得结果的密码强度将强

    2023年04月26日
    浏览(38)
  • 【密码学】三、分组密码概述

    分组密码算法是将输入数据划分成固定长度的组进行加密和解密的一类对称密码算法。本章主要介绍分组密码概述、DES、AES,以及分组密码的工作模式和分组密码分析。 分组密码是一种单钥或对称密码算法,通信双方使用相同的密钥加密和解密。 在分组密码中,要将明文分

    2024年02月16日
    浏览(28)
  • 密码学入门——环游密码世界

    图解密码技术 第三版 1.1 本书主要角色 1.2 加密与解密 加密 解密 密码破译 2.1 密钥 加密,解密与密钥 2.2 对称密码和公钥密码 1.对称密码是指在加密和解密时使用同一密钥的方式。 2.公钥密码是指在加密和解密时使用不同密钥的方式。因此,公钥密码又称非对称密码。 2.3 混

    2024年02月10日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包