凯撒加解密和破解

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

简单介绍

        古典密码学是最基础的密码学问题,在古典密码学中,最为经典的就是凯撒密码。我们在这里简单介绍一下凯撒密码。

        凯撒密码又称为凯撒加密,凯撒变换,变换加密,是一种最简单且为广为人知的加密技术。他就是一种替换加密。在明文中使用字母进行前移(或后退)的方法进行替换对应的字母。

凯撒加解密和破解

 这个图展示了简单的凯撒密码加密。在这个图中,我们的凯撒加密是通过对字母进行循环后移3位。也就是A被替换成D,B替换成E,对于最后三位X,Y和Z,我们通过循环,即从头开始对应,得到X替换成A,Y替换成B,Z替换成C。

使用样例

编写代码回答下面问题:

1. 输入任意明文和秘钥K=10,对其进行凯撒加密。

2. 输入密文和秘钥K=10,对其进行凯撒解密。

3. 破译如下密文:Izqzm piyzmznodhvoz tjpm kjrzm oj xcvibz tjpmnzga!

解答:

问题1

我们可以通过计算公式凯撒加解密和破解进行计算。

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

#include <bits/stdc++.h>

using namespace std;

int main(){
    string a;
    getline(cin, a);
    int K = 10;
    int n = a.length();
    for (int i = 0; i < n;i++){
        if(a[i]>'p'){
            a[i]=a[i] - 26+K;
        }else if(a[i] ==' '){
            a[i] = a[i];
        }else{
            a[i] += K;
        }
        cout << a[i];
    }
    cout << "\n";
    return 0;
}

问题2

我们通过公式计算

#include <bits/stdc++.h>

using namespace std;

int main(){
    string a;
    getline(cin, a);
    int K = 10;
    int n = a.length();
    for (int i = 0; i < n;i++){
        if((a[i] < 'k' and a[i]>='a') or (a[i]<'K' and a[i]>='A')){
            a[i] = a[i] + 26-K;
        }else if(a[i] ==' '){
            a[i] = a[i];
        }else if(a[i]<'A' or (a[i]>'Z' and a[i]<'a') or a[i]>'z'){
            a[i] = a[i];
        }
        else{
            a[i] -= K;
        }
        cout << a[i];
    }
    cout << "\n";
    return 0;
}

问题3

在这里我们需要将所给的密文进行还原,但是我们又不知道秘钥K为多少,这里我们就不能简单的得到结果。使用问题2的办法进行解密,我们这里K的取值很多,可以是1,2,3······25,一共有25种可能。由于凯撒密码比较简单,计算也不复杂,将这25种可能都枚举一次对于计算机而言,还是很简单的,速度还是很快的,所以我们在这里可以使用暴力求解的方法,将K从1到25进行取值求取明文,最后使用肉眼进行区别真正的明文到底是25个明文中哪一个。

代码如下:

#include<bits/stdc++.h>

using namespace std;

int main(){
    string a;
    getline(cin, a);
    int n = a.length();
    for (int K = 1; K <= 25;K++){
        for (int i = 0; i < n;i++){
        if((a[i] < 'a'+K and a[i]>='a') or (a[i]<'A'+K and a[i]>='A')){
            a[i] = a[i] + 26-K;
        }else if(a[i] ==' '){
            a[i] = a[i];
        }else if(a[i]<'A' or (a[i]>'Z' and a[i]<'a') or a[i]>'z'){
            a[i] = a[i];
        }
        else{
            a[i] -= K;
        }
        cout << a[i];
    }
    cout << "\n";
    }
    
        return 0;
}

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

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

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

相关文章

  • 【网络安全】【密码学】【北京航空航天大学】实验四、古典密码(上)【C语言实现】

    1、 通过本次实验,了解古典加密算法的 主要思想 ,掌握 常见的 古典密码。 2、 学会 应用 古典密码,掌握针对部分古典密码的 破译方法 。 古典密码的编码方法主要有两种: 置换 和 代替 。 置换密码 重新排列明文中字符的顺序,不改变字符本身; 代替密码 不改变明文中

    2024年01月21日
    浏览(72)
  • 【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】

    实验目的 和 原理简介 参见博客:古典密码(上) 1、弗纳姆密码(Vernam Cipher) (1)、算法原理 加密 原理: 加密过程可以用方程 ci = pi (+) ki 表示,其中 pi 是明文第 i 个二进制位, ki 是密钥第 i 个二进制位, ci 是密文第 i 个二进制位, (+) 是 异或 运算符。密文是通过对明

    2024年01月21日
    浏览(66)
  • CTF-Show密码学:ZIP文件密码破解【暴力破解】

    萌新 隐写23 题目内容: 文件的主人喜欢用生日做密码,而且还是个90后。 在这个题目中,我们有以下已知条件: 文件的主人喜欢用生日做密码 - 这个条件告诉我们,密码可能是一个八位的纯数字密码,因为大多数人的生日在公历中都可以用八位数字表示(例如,19901231表示

    2024年02月10日
    浏览(44)
  • ctf密码学之四方密码解密

    前几日刷题遇到一道密码学的四方解密题: 题目如下:四方门主东方青木看着四面八方涌过来的极客,非常震惊,转头便进入了祖祠中的地下室,发现这丫传自唐朝的密室还设计了英文密码。旁边的石头上(附件中有拓本)刻着密码和密文,大家快帮助门主解出密码(答案为

    2024年02月14日
    浏览(80)
  • 密码学 - 加解密算法 - 填充规则

    对称加解密算法是分组运算,运算时需要将数据按固定长度分组,由于明文不一定是指定大小的整数倍,因此需要将明文的最后一个分组填充至加密算法所要求的分组大小后进行运算。 随着加解密算法的发展,出现了多种填充规则。 填充规则是对称加密分组加密算法的通用

    2024年02月09日
    浏览(42)
  • DES的加密与解密(C语言实现)——大三密码学实验

    目录 DES的描述 Feistel体制 密钥扩展函数 F函数 总流程  代码 get函数的构建 yihuo函数的构建 fuck函数的构建 left_move函数的构建 exchange函数的构建 erzhuanshi函数的构建 shizhuaner函数的构建 s_box函数的构建 主函数的构建 总函数 运行结果示例 DES: 16 轮, Feistel 型结构 明文长度:

    2024年02月07日
    浏览(48)
  • 联邦学习:密码学 + 机器学习 + 分布式 实现隐私计算,破解医学界数据孤岛的长期难题

      这联邦学习呢,就是让不同的地方一起弄一个学习的模型,但重要的是,大家的数据都是自己家的,不用给别人。 这样一来,人家的秘密就不会到处乱跑(数据不出本地),又能合力干大事。   <没有联邦学习的情况> 在没有联邦学习的情况下,医院面临的一个主要问题

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

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

    2024年02月11日
    浏览(64)
  • DES的加密解密在ECB上的使用(C语言实现)——大三密码学实验

    目录 实验内容 实验原理 DES加密解密 ECB(电码本模式) 代码 DES函数的构建 RE_DES函数的构建 ECB函数的构建 RE_ECB的函数的构建 主函数的构建 总代码 测试结果 输入一个文本文件,通过ECB和DES进行加密,再将内容储存在新的文本文件中,再通过ECB和DES解密,将内容储存在新的文本

    2024年02月04日
    浏览(59)
  • 【密码学】DES 介绍

    DES:Data Encryption Standard(数据加密标准) DES 是一种 对称密钥 的 块加密 算法。 谓之 “对称密钥”,是因为加密、解密用的密钥是一样的。 谓之 “块加密”,是因为这种算法把明文划分为很多个等长的块(block),对每个块进行加密,最后以某种手段拼在一起。“块加密” 亦

    2024年02月02日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包