C++实现Atbash密码

详细说明 埃特巴什密码是一种替换密码,在该密码中字母表中的字母是反向对应的。例如,A 会被替换为 Z,B 会被替换为 Y,依此类推。

#include <cassert>   /// for assert
#include <iostream>  /// for IO operations
#include <map>       /// for std::map
#include <string>    /// for std::string/** \namespace ciphers* \brief Algorithms for encryption and decryption*/
namespace ciphers {/** \namespace atbash* \brief Functions for the [Atbash* Cipher](https://en.wikipedia.org/wiki/Atbash) implementation*/namespace atbash {std::map<char, char> atbash_cipher_map = {{'a', 'z'}, {'b', 'y'}, {'c', 'x'}, {'d', 'w'}, {'e', 'v'}, {'f', 'u'},{'g', 't'}, {'h', 's'}, {'i', 'r'}, {'j', 'q'}, {'k', 'p'}, {'l', 'o'},{'m', 'n'}, {'n', 'm'}, {'o', 'l'}, {'p', 'k'}, {'q', 'j'}, {'r', 'i'},{'s', 'h'}, {'t', 'g'}, {'u', 'f'}, {'v', 'e'}, {'w', 'd'}, {'x', 'c'},{'y', 'b'}, {'z', 'a'}, {'A', 'Z'}, {'B', 'Y'}, {'C', 'X'}, {'D', 'W'},{'E', 'V'}, {'F', 'U'}, {'G', 'T'}, {'H', 'S'}, {'I', 'R'}, {'J', 'Q'},{'K', 'P'}, {'L', 'O'}, {'M', 'N'}, {'N', 'M'}, {'O', 'L'}, {'P', 'K'},{'Q', 'J'}, {'R', 'I'}, {'S', 'H'}, {'T', 'G'}, {'U', 'F'}, {'V', 'E'},{'W', 'D'}, {'X', 'C'}, {'Y', 'B'}, {'Z', 'A'}, {' ', ' '}};/*** @brief atbash cipher encryption and decryption* @param text Plaintext to be encrypted* @returns encoded or decoded string*/std::string atbash_cipher(const std::string& text) {std::string result;for (char letter : text) {result += atbash_cipher_map[letter];}return result;}}  // namespace atbash
}  // namespace ciphers/*** @brief Self-test implementations* @returns void*/
static void test() {// 1st teststd::string text = "Hello World";std::string expected = "Svool Dliow";std::string encrypted_text = ciphers::atbash::atbash_cipher(text);std::string decrypted_text = ciphers::atbash::atbash_cipher(encrypted_text);assert(expected == encrypted_text);assert(text == decrypted_text);std::cout << "Original text: " << text << std::endl;std::cout << ", Expected text: " << expected << std::endl;std::cout << ", Encrypted text: " << encrypted_text << std::endl;std::cout << ", Decrypted text: " << decrypted_text << std::endl;std::cout << "\nAll tests have successfully passed!\n";
}/*** @brief Main function* @returns 0 on exit*/
int main() {test();  // run self-test implementationsreturn 0;
}

代码详细逐句解释

1. 命名空间定义
namespace ciphers {namespace atbash {

定义了嵌套的命名空间 ciphers::atbash,用于组织和封装Atbash加密算法。

2. 映射表定义
std::map<char, char> atbash_cipher_map = {{'a', 'z'}, {'b', 'y'}, {'c', 'x'}, {'d', 'w'}, {'e', 'v'}, {'f', 'u'},{'g', 't'}, {'h', 's'}, {'i', 'r'}, {'j', 'q'}, {'k', 'p'}, {'l', 'o'},{'m', 'n'}, {'n', 'm'}, {'o', 'l'}, {'p', 'k'}, {'q', 'j'}, {'r', 'i'},{'s', 'h'}, {'t', 'g'}, {'u', 'f'}, {'v', 'e'}, {'w', 'd'}, {'x', 'c'},{'y', 'b'}, {'z', 'a'}, {'A', 'Z'}, {'B', 'Y'}, {'C', 'X'}, {'D', 'W'},{'E', 'V'}, {'F', 'U'}, {'G', 'T'}, {'H', 'S'}, {'I', 'R'}, {'J', 'Q'},{'K', 'P'}, {'L', 'O'}, {'M', 'N'}, {'N', 'M'}, {'O', 'L'}, {'P', 'K'},{'Q', 'J'}, {'R', 'I'}, {'S', 'H'}, {'T', 'G'}, {'U', 'F'}, {'V', 'E'},{'W', 'D'}, {'X', 'C'}, {'Y', 'B'}, {'Z', 'A'}, {' ', ' '}
};

这个映射表定义了每个字母(包括大写和小写)及其对应的Atbash加密字母之间的映射关系。例如:

  • 小写字母 'a' 映射到 'z'

  • 大写字母 'A' 映射到 'Z'

  • 空格 ' ' 映射到自身。

3. 加密/解密函数
std::string atbash_cipher(const std::string& text) {std::string result;for (char letter : text) {result += atbash_cipher_map[letter];}return result;
}
  • 参数

    • text:输入的待加密或解密的字符串。

  • 功能

    • 遍历输入字符串的每个字符。

    • 使用 atbash_cipher_map 查找每个字符的对应值,并将其追加到结果字符串 result 中。

  • 返回值

    • 返回加密或解密后的结果字符串。

4. 测试函数
static void test() {// 1st teststd::string text = "Hello World";std::string expected = "Svool Dliow";std::string encrypted_text = ciphers::atbash::atbash_cipher(text);std::string decrypted_text = ciphers::atbash::atbash_cipher(encrypted_text);assert(expected == encrypted_text);assert(text == decrypted_text);std::cout << "Original text: " << text << std::endl;std::cout << ", Expected text: " << expected << std::endl;std::cout << ", Encrypted text: " << encrypted_text << std::endl;std::cout << ", Decrypted text: " << decrypted_text << std::endl;std::cout << "\nAll tests have successfully passed!\n";
}
  • 功能

    • 测试 atbash_cipher 函数的正确性。

    • 使用示例文本 "Hello World" 进行加密和解密测试。

    • 验证加密结果是否与预期一致,并验证解密后的文本是否与原始文本一致。

  • 断言

    • assert(expected == encrypted_text):确保加密结果正确。

    • assert(text == decrypted_text):确保解密结果与原始文本一致。

  • 输出

    • 打印原始文本、预期文本、加密文本和解密文本。

代码执行流程

  1. 测试函数调用

    • main 函数中调用 test 函数。

  2. 加密测试

    • "Hello World" 作为输入,调用 atbash_cipher 进行加密。

  3. 解密测试

    • 将加密后的字符串再次作为输入,调用 atbash_cipher 进行解密。

  4. 验证结果

    • 使用断言验证加密和解密的正确性。

  5. 输出结果

    • 打印测试结果。

示例

假设输入文本为 "Hello World"

  • 加密过程

    • 'H' → 'S'

    • 'e' → 'v'

    • 'l' → 'o'

    • 'l' → 'o'

    • 'o' → 'l'

    • ' ' → ' '

    • 'W' → 'D'

    • 'o' → 'l'

    • 'r' → 'i'

    • 'l' → 'o'

    • 'd' → 'w'

  • 加密结果为 "Svool Dliow"

  • 解密过程

    • 再次调用 atbash_cipher 对加密结果进行解密,应得到原始文本 "Hello World"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QuecPython+GNSS:实现快速定位

概述 QuecPython 结合 GNSS&#xff08;全球导航卫星系统&#xff09;模块为物联网设备提供开箱即用的定位能力解决方案。该方案支持 GPS/北斗/GLONASS/Galileo 多系统联合定位&#xff0c;为物联网开发者提供从硬件接入到云端服务的全栈式定位解决方案。 优势特点 多体系定…

leetcode刷题日记——逆波兰表达式求值

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 借助栈的特性&#xff0c;遇见数字就将这个数压入栈内&#xff0c;遇见符号&#xff0c;就从栈中弹出两个数&#xff0c;进行相应的运算&#xff0c;然后将结果压入栈中运行如下 int evalRPN(char** tokens, int tokensSize…

firewalld 详解

firewalld 详解 firewalld 是 Linux 系统中一个动态防火墙管理工具&#xff0c;取代了传统的 iptables&#xff0c;提供更灵活、动态的规则配置&#xff0c;支持运行时修改且无需重载服务。以下是其核心概念、常用操作及示例指南&#xff1a; 一、核心概念 区域&#xff08;Zo…

面向高性能运动控制的MCU:架构创新、算法优化与应用分析

摘要&#xff1a;现代工业自动化、汽车电子以及商业航天等领域对运动控制MCU的性能要求不断提升。本文以国科安芯的MCU芯片AS32A601为例&#xff0c;从架构创新、算法优化到实际应用案例&#xff0c;全方位展示其在高性能运动控制领域的优势与潜力。该MCU以32位RISC-V指令集为基…

支付宝小程序组件与页面构造器使用指南:从页面到组件的正确迁移

引言 在支付宝小程序开发中&#xff0c;我们经常会遇到需要将页面组件化的情况。本文将通过一个实际案例&#xff08;将 /pages/plugin/device 从页面迁移到组件&#xff09;&#xff0c;深入分析支付宝小程序中页面和组件的区别&#xff0c;以及正确的迁移方式。我们将从问题…

26-算法打卡-字符串-右旋字符串-第二十六天

1 题目说明 字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k&#xff0c;请编写一个函数&#xff0c;将字符串中的后面 k 个字符移到字符串的前面&#xff0c;实现字符串的右旋转操作。 例如&#xff0c;对于输入字符串 &qu…

fastbev mmdetection3D 角度和方向损失

角度/方向损失 sin(a−b)sinacosb−cosasinb config参数 dir_offset0.7854, # pi/4 dir_limit_offset0, box编解码 # Copyright (c) OpenMMLab. All rights reserved. import torchfrom mmdet.core.bbox import BaseBBoxCoder from mmdet.core.bbox.builder import BBOX_COD…

极狐GitLab 如何 cherry-pick 变更?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 拣选(cherry-pick)更改 (BASIC ALL) 在 Git 中&#xff0c;cherry-pick 是从一个分支获取一个提交并将其添加为另一个分支的…

java多线程(7.0)

目录 ​编辑 定时器 定时器的使用 三.定时器的实现 MyTimer 3.1 分析思路 1. 创建执行任务的类。 2. 管理任务 3. 执行任务 3.2 线程安全问题 定时器 定时器是软件开发中的一个重要组件. 类似于一个 "闹钟". 达到一个设定的时间之后, 就执行某个指定好的…

优化非线性复杂系统的参数

非线性项组合的系统 对于系统中的每一个复杂拟合&#xff0c;即每一个残差函数&#xff0c;都能表示为非线性方程的趋势&#xff0c;例如较为复杂的系统函数组&#xff0c; from optimtool.base import sp, np x sp.symbols("x1:5") res1 0.5*x[0] 0.2*x[1] 1.…

清华LeapLab开源Cooragent框架:一句话构建本地智能体服务群,让AGI真正触手可及

引言&#xff1a;智能体革命&#xff0c;从复杂到简单 在人工智能发展的浪潮中&#xff0c;Agent&#xff08;智能体&#xff09; 技术被视为实现通用人工智能&#xff08;AGI&#xff09;的关键路径。然而&#xff0c;传统智能体的开发与协作始终面临两大痛点&#xff1a;依赖…

云原生--核心组件-容器篇-1-Docker和云原生关系(Docker是云原生的基石)

1、基本概念 &#xff08;1&#xff09;、云原生&#xff08;Cloud Native&#xff09; 是一种构建和运行应用程序的方法论&#xff0c;旨在充分利用云计算环境&#xff08;公有云、私有云、混合云&#xff09;的特性&#xff0c;通过容器化、微服务、服务网格、声明式API等技…

问答页面支持拖拽和复制粘贴文件,MaxKB企业级AI助手v1.10.6 LTS版本发布

2025年4月24日&#xff0c;MaxKB开源企业级AI助手正式发布v1.10.6 LTS版本。这一版本主要进行了一些功能优化和问题修复。 功能优化 ■ 应用&#xff1a;文件上传支持上传其他自定义的文件类型&#xff0c;该类型文件需要自行写入函数解析&#xff1b; ■ 问答页面&#xff…

用户案例--慧眼科技

作者&#xff1a;算力魔方创始人/英特尔创新大使刘力 每个行业都有其独特的需求&#xff0c;算力魔方推出了全面的定制化服务&#xff0c;从概念到产品化&#xff0c;满足各行各业&#xff0c;用户可以根据具体应用需求定制更多接口或更强图形处理的需求&#xff0c;且算力魔方…

apple 个人开发者转公司经验

1、在apple开发者官网申请 2、收到邮件后&#xff0c;回复准备了开始迁移 3、收到填写迁移资料的邮件 4、开始填写资料 Sign In - Applehttps://developer.apple.com/enroll/type/edit To complete this change, you will need: 要完成此更改&#xff0c;您需要&#xff1a; L…

【ESP32-IDF笔记】20-配置以太网网络(W5500)

环境配置 Visual Studio Code &#xff1a;版本1.98.2 ESP32&#xff1a;ESP32-S3 ESP-IDF&#xff1a;V5.4 模块&#xff1a;W5500&#xff0c;SPI通讯协议 组件支持&#xff1a;esp_eth 官方的ethernet 以太网组件 W5500介绍 介绍 W5500 是一款全硬件 TCP/IP 嵌入式以太网…

卫星通信的基本概念

1 频段 频段 频率范围 技术特点 典型应用 优势 局限性 最新进展 L 频段 1-2 GHz 波长较长&#xff0c;穿透能力强&#xff0c;受天气影响小&#xff0c;带宽较窄&#xff08;<100 MHz&#xff09;。 卫星导航&#xff08;北斗 / GPS&#xff09;、海事通信&#x…

数据结构------C语言经典题目(7)

1.系统栈和数据结构中的栈有什么区别&#xff1f; 1.本质&#xff1a; 系统栈&#xff1a;由程序运行时由操作系统自动分配的一块连续内存区域&#xff0c;用于存储函数调用过程中的临时数据&#xff08;参数、局部变量、返回地址&#xff09;&#xff0c;是程序运行的底层机制…

【Redis】一、redis的下载与安装

目录 一、redis下载 二、启动服务 三、测试服务 四、可视化界面 五、设置reids密码 今天起准备对redis进行学习&#xff0c;目标是掌握实际开发项目中如何应用redis等操作。首先在这里讲将如何下载redis&#xff0c;方便以后查阅。 一、redis下载 可以去官网&#xff08…

vue3中nextTick的作用及示例

在Vue 3中&#xff0c;nextTick是一个用于处理DOM异步更新的工具函数&#xff0c;确保在数据变化后操作最新的DOM。以下是其作用的详细解析&#xff1a; 核心作用 延迟回调到DOM更新后&#xff1a;Vue的响应式系统会将数据变更批量处理&#xff0c;异步更新DOM。nextTick允许你…