古典密码算法 凯撒(Caesar)密码,又叫循环移位密码

本文介绍了古典密码算法中的凯撒密码,这是一种简单的单表替代密码,通过字母表中固定位移实现加密和解密。文章详细讲解了凯撒密码的工作原理,并提供了加密与解密的代码实现。

古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。

1. 替代密码

替代密码的原理是使用替代法进行加密,就是将明文由其它的字母、数字或符合所代替后形成密文。这里每个明文字母对应的密文字母可能是一个,也可能是多个。接收者对密文进行逆向替换即可得到明文。替代密码有五种表现形式:

1单表代替

即简单替代密码或者称为单字母代替,明文字母表中的一个字符对应密文字母表中的一个字符。这是所有加密中最简单的方法。 

2多名码代替

就是将明文字母表中的字符映射为密文字母表中的多个字符。多名码简单代替早在1401年就由DuchyMantua公司使用。在英文中,元音字母出现频率最高,降低对应密文字母出现频率的一种方法就是使用多名码,如e可能被密文51325替代。 

// // main.cpp // step1 // // Created by ljpc on 2018/10/16. // Copyright © 2018年 ljpc. All rights reserved. // #include <iostream> #include <stdio.h> #include <string.h> #define N 26 void Encrypt(int K, char* clearText, char* cipherText) { // 请在这里补充代码,完成本关任务 /********* Begin *********/ /********* End *********/ } void Dencrypt(int K, char* clearText, char* cipherText) { // 请在这里补充代码,完成本关任务 /********* Begin *********/ /********* End *********/ } int main(int argc, const char * argv[]) { int K; char ClearText[100]; char ClearText2[100]; char CipherText[100]; scanf("%d", &K); scanf("%s", ClearText); printf("密钥:%d\n", K); printf("明文:%s\n", ClearText); Encrypt(K, ClearText, CipherText); printf("密文:%s\n", CipherText); Dencrypt(K, ClearText2, CipherText); printf("解密:%s\n", ClearText2); return 0; } 任务:了解古典密码体制技术中的代换技术,并编程实现代换密码的加解密功能。 注意所有明文字符为26个小写字母,也就是说字母表为26个小写字母。 相关知识 为了完成本关任务,你需要掌握:1.古典密码算法,2.代换密码古典密码算法 古典密码算法历史上曾被广泛应用,大都使用手工和机械操作来实现加密解密,比较简单。古典密码主要是利用密码算法实现文字信息的加密解密,本实验运用两种常见的具有代表性的古典密码技术——代换密码技术,以帮助学员对密码算法建立一个初步的认识和印象。 代换密码 代换密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母a,b,c,d,用D,E,F,G做对应替换后形成密文。 代换密码包括多种类型,如单表替代密码,多明码替代密码,多字母替代密码,多表替代密码等。本实验利用一种典型的单表替代密码——恺撒caesar密码又叫循环移位密码加密方法是将明文中的每个字符,用此字符在字母表中后面第k个字母替代,加密过程可以表示为下面的函数: E(m)=(m+k)(modn) 其中:m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。 例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L: E(8)=(m+k)(modn)=(8+4)(mod26)=12=L 编程要求 本关的编程任务是补全右侧代码片段Encrypt和Dencrypt中Begin至End中间的代码,具体要求如下: 在Encrypt中,根据实验原理部分对凯撒密码算法的介绍,将明文字符串参数clearText通过密钥参数K加密转换成密文,并存入密文字符串参数变量cipherText。 在Dencrypt中,与Encrypt函数相对,将密文字符串参数cipherText通过密钥参数K解密转换成明文,并存入明文字符串参数变量clearText。 测试说明 平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。 以下是平台的测试样例: 测试输入: 4 internet 预期输出: 密钥:4 明文:internet 密文:mrxivrix 解密:internet 输入格式: 第1行:整数k,表示密钥 第2行:待加密明文 输出格式: 第1行:输出密钥k 第2行:输出原始明文 第3行:输出加密后的密文 第4行:输出解密后的明文
09-09
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值