当前位置: 首页 > news >正文

凯撒密码算法的实现

       在密码学里,凯撒密码(也叫恺撒密码、移位密码、恺撒代码或者恺撒移位)是一种简单且广为人知的加密技术。它属于替换密码的一种,在这种加密方式中,明文中的每个字母都会被替换成字母表中往后移动固定位数的字母。例如,若向左移动 3 位,字母 D 会被替换成 A,E 会变成 B,依此类推。该加密方法以尤利乌斯・恺撒(Julius Caesar)命名,他在私人通信中使用过这种方法。

1. 命名空间结构

namespace ciphers {namespace caesar {namespace {// 辅助函数定义}// 加密解密主函数定义}
}
  • 使用了命名空间 ciphers 和子命名空间 caesar,来组织代码,避免命名冲突

  • 匿名命名空间(namespace {})存放辅助函数,这些辅助函数只能在当前命名空间内访问

2. 辅助函数

inline char get_char(const int x) {return char(x + 65);
}inline int get_value(const char c) {return int(c - 65);
}
  • get_char:将0-25的整数值转换为对应的英文字母(A-Z)

  • get_value:将英文字母(A-Z)转换为0-25的整数值

  • 这两个函数通过ASCII码表进行转换(A的ASCII值为65)

3. 加密函数

std::string encrypt(const std::string& text, const int& shift) {std::string encrypted_text = "";for (char c : text) {int place_value = get_value(c);place_value = (place_value + shift) % 26;char new_char = get_char(place_value);encrypted_text += new_char;}return encrypted_text;
}
  • 遍历输入文本的每个字符

  • 获取字符的整数值,应用凯撒密码公式:(原值 + 移位数) % 26

  • 将加密后的整数值转换为字符,添加到结果字符串

  • 返回加密后的文本

4. 解密函数

std::string decrypt(const std::string& text, const int& shift) {std::string decrypted_text = "";for (char c : text) {int place_value = get_value(c);place_value = (place_value - shift) % 26;if (place_value < 0) {place_value = place_value + 26;}char new_char = get_char(place_value);decrypted_text += new_char;}return decrypted_text;
}
  • 与加密函数类似,但移位方向相反

  • 添加了对负值的处理,确保解密后的值在0-25范围内

5. 测试函数

void test() {// Test 1std::string text1 = "ALANTURING";std::string encrypted1 = ciphers::caesar::encrypt(text1, 17);std::string decrypted1 = ciphers::caesar::decrypt(encrypted1, 17);assert(text1 == decrypted1);std::cout << "Original text : " << text1;std::cout << " , Encrypted text (with shift = 17) : " << encrypted1;std::cout << " , Decrypted text : " << decrypted1 << std::endl;// Test 2std::string text2 = "HELLOWORLD";std::string encrypted2 = ciphers::caesar::encrypt(text2, 1729);std::string decrypted2 = ciphers::caesar::decrypt(encrypted2, 1729);assert(text2 == decrypted2);std::cout << "Original text : " << text2;std::cout << " , Encrypted text (with shift = 1729) : " << encrypted2;std::cout << " , Decrypted text : " << decrypted2 << std::endl;
}
  • 测试了两个不同的输入字符串和移位值

  • 使用 assert 确保加密和解密是互逆过程

  • 打印了原始文本、加密文本和解密文本

6. 主函数

int main() {test();return 0;
}
  • 调用测试函数运行测试案例

总结

这段代码实现了标准的凯撒密码加密解密功能,具有以下特点:

  1. 使用命名空间组织代码

  2. 提供了辅助函数处理字符和整数之间的转换

  3. 实现了加密和解密的核心逻辑

  4. 包含了测试代码验证功能的正确性

  5. 处理了负值等边界情况

代码结构清晰,功能完整,适合学习和使用凯撒密码的基础实现。

相关文章:

  • 【LLM】Qwen3模型训练和推理
  • 【论文_序列转换模型架构_20230802v7】Attention Is All You Need 【Transformer】
  • 想做博闻强记的自己
  • 《云原生》核心内容梳理和分阶段学习计划
  • 软件设计师-软考知识复习(1)
  • 【嘉立创EDA】如何找到曲线和直线的交点,或找到弧线和直线的交点
  • jspm老年体检信息管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • JavaScript中 说说你对闭包的理解?闭包使用场景?
  • 算法每日一题 | 入门-顺序结构-A+B Problem
  • 【Python魔法方法(特殊方法)】
  • Spring知识点梳理
  • 贵族运动项目有哪些·棒球1号位
  • CSS:编写位置分类及优先级
  • 除法未能拿下 一直运行超时
  • javascript<——>进阶
  • linux修改环境变量
  • 【AI平台】n8n入门4:n8n云创建工作流(无须搭建,快速试用14天)
  • 基于arduino的温湿度传感器应用
  • 系统分析师-第十三、十四章
  • 软考高项(信息系统项目管理师)第 4 版全章节核心考点解析(第4版课程精华版)
  • 人物|德国新外长关键词:总理忠实盟友、外交防务专家、大西洋主义者
  • 济南高新区一季度GDP增长8.5%,第二产业增加值同比增长14.4%
  • 排除燃气爆炸、人为放火可能,辽宁辽阳火灾事故起火原因正在调查
  • 兴业银行一季度净赚超237亿降逾2%,营收降逾3%
  • 国家发改委下达今年第二批810亿超长期特别国债资金,支持消费品以旧换新
  • 太好玩了!坐进大卫·霍克尼的敞篷车穿越他画笔下的四季