最近学了点加密算法于是打算自己写一个小程序来实现这些加解密过程。先从简单的背包加密开始吧。
源代码贴在下面,exe文件下载密码:iitg。
一、算法设计
背包算法-百度百科
1.算法设计过程
首先考虑到明文多由各种字符组成,如“Just for fun.“。然后思考权衡后(有了自知之明之后)决定加密后的密文为多个数字,每个数字对应一个字符。与字符对应的数字首先想到ASCII码,于是考虑对ASCII码的二进制格式进行背包加密。
但这样加密的强度显然是不够的,于是在前辈的指导下借鉴了cbc的方法进行扩散
2.公开钥
考虑到每个字符占8byte,使用8个数字作为公开钥。
a:{217,218,219,222,228,240,262,100}
初始向量:P
3.秘密钥
b:{1,3,5,11,23,47,91,200}
M,W^-1:{433,2}
4.明文
Just for fun.
5.密文
340 457 1008 319 1104 905 1039 1388 703 1029 730 787 1126
6.加解密运算过程
(0).准备工作
定义初始向量iv:P并对其进行加密——>490
(1).加密(以加密’I’为例)
读取字符’I’——>得到其ASCII码值:73——>与前一位密文或初始向量加密值进行异或:163——>转化为二进制:10100011——>使用公开钥进行加密计算得到密文:775(1*100+1*240+1*217+1*218)
(2).解密(以解密701为例)
读取密文数字775——>计算c=(W^-1*c)modM:251——>使用b对其求解:-93——>与前一位密文或初始向量加密值后八位进行异或:01001001——>得到ASCII码:73——>得到明文:‘I’
二、简单的C语言实现
//
// main.c
// BagLock
//
// Created by passer_by_a on 2017/11/14.
// Copyright © 2017年 passer_by_a. All rights reserved.
//
#include <stdio.h>
#include &