列变位法解密
2016-05-11 20:45
459 查看
列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置任何字符,完成后按列读取即成密文。
比如:
原文:123456789
密钥:4
变换后的矩阵:
1234
5678
9xxx
(最后的几个x表示无任何字符,不是空格,不是制表符,就没有任何字符,下同)
密文:159263748
再比如:
原文:Hello, welcome to my dream world!
密钥:7
变换后的矩阵:
Hello,
welcome
to my
dream w
orld!xx
密文:
Hw doeetrrlloellc adoomm!,my e w
比如:
原文:123456789
密钥:4
变换后的矩阵:
1234
5678
9xxx
(最后的几个x表示无任何字符,不是空格,不是制表符,就没有任何字符,下同)
密文:159263748
再比如:
原文:Hello, welcome to my dream world!
密钥:7
变换后的矩阵:
Hello,
welcome
to my
dream w
orld!xx
密文:
Hw doeetrrlloellc adoomm!,my e w
#include <cstdio> #include <cstring> const int MAXN = 10e5; char str[MAXN+5]; char cip[MAXN+5]; int main() { int t, key; size_t len; int rest, row; int cnt; scanf("%d", &t); getchar(); for(int i = 1; i <= t; i++) { gets(str); scanf("%d", &key); getchar(); cnt = 0; len = strlen(str); rest = len % key; row = len/key + 1; for(int j = 0; j < rest; j++) { for(int k = 0; k < row; k++) { cip[k*key+j] = str[cnt++]; } } for(int j = rest; j < key; j++) { for(int k = 0; k < row - 1; k++) { cip[k*key+j] = str[cnt++]; } } printf("Case #%d:\n", i); for (int i = 0; i < len; i++) { putchar(cip[i]); } putchar('\n'); } return 0; }
相关文章推荐
- openGL 解析ply文件并且显示三维模型
- 代理设计模式 && block设计模式 && KVC\KVO
- JDBC系列:(2)使用Statement执行sql语句
- Deep learning 资料汇总--持续更新
- 记录两个python的小问题
- tableView性能优化cell循环利用 && 自定义cell
- Cordova JqueryMoible 开发
- IOS程序开发-UI基础
- 堆的实现
- 循环结构
- 记录两个python的小问题
- EM算法介绍1
- 记录两个python的小问题
- cnblogs用户体验
- Git 常用命令速查表
- 杀掉进程
- delphi概念性学习(二)
- 数塔(最简单的入门题)
- ZOJ 3702 Gibonacci number (找规律/不看题解好了)
- HDU 1716 排列2