前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >古典加密的C++实现——凯撒密码、单表代换密码

古典加密的C++实现——凯撒密码、单表代换密码

作者头像
秋名山码神
发布2023-10-16 13:59:48
6250
发布2023-10-16 13:59:48
举报
文章被收录于专栏:码神随笔

前言

好久没写文了,今天更新几个加密算法,均采用C++实现

系列文章

  1. DH算法

古典加密

凯撒密码

凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。编写代码为右移3位

不难得到,他的加密公式为:CaesarCipher(a) = (a+3) mod 26

解密公式为:CaesarCipher(a) = (a+23)mod 26

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;

string caesarEncrypt(const string& message, int shift) {
    string encryptedMessage = "";
    for (char c : message) {
        if (isalpha(c)) {
            char shiftedChar = (toupper(c) - 'A' + shift) % 26 + 'A';
            encryptedMessage += shiftedChar;
        }
        else {
            encryptedMessage += c;
        }
    }
    return encryptedMessage;
}

int main() {
    string message;
    int shift;

    cout << "输入: ";
    getline(cin, message);

    cout << "输入移位:";
    cin >> shift;

    string encryptedMessage = caesarEncrypt(message, shift);

    cout << "加密后字符串:" << encryptedMessage << endl;

    return 0;
}

解密和加密差不多,上面也给出公式了,还请读者自己实现一下。

单表代换密码

这个也比较简单,就是把明文中的每个字母替换为固定的密文字母来进行加密。

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

string monoalphabeticEncrypt(const string& message, const unordered_map<char, char>& substitutionTable) {
    string encryptedMessage = "";
    for (char c : message) {
        if (isalpha(c)) {
            char substitutedChar = substitutionTable.at(toupper(c));
            encryptedMessage += islower(c) ? tolower(substitutedChar) : substitutedChar;
        }
        else {
            encryptedMessage += c;
        }
    }
    return encryptedMessage;
}

int main() {
    string message;
    unordered_map<char, char> substitutionTable;

    // 初始化替换表
    substitutionTable['A'] = 'Q';
    substitutionTable['B'] = 'W';
    substitutionTable['C'] = 'E';
   

    cout << "输入 ";
    getline(cin, message);

    string encryptedMessage = monoalphabeticEncrypt(message, substitutionTable);

    cout << "输出 " << encryptedMessage << endl;

    return 0;
}

最后

如果本文对你有所帮助,还请三连支持一下博主!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 古典加密
    • 凯撒密码
      • 单表代换密码
      • 最后
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档