C语言学习笔记(八)---简单的背包加密算法练习

最近学了点加密算法于是打算自己写一个小程序来实现这些加解密过程。先从简单的背包加密开始吧。
源代码贴在下面,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 &
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值