【综合】简单加解密——寻找序列号





下面文字对你可能有用(复制+粘贴):

#include <stdlib.h>

#include <string.h>
#include “malloc.h”
#define MaxPass 66 // 最多66段密文
#define NumbPwdTable 5 // 密码表的份数
#define SizePwdTable 0x210 // 每份密码表占用字节数

struct PassStru // 密码表结构: 编移(4字节),密文长度(2字节),钥匙(1字节)。 结构体长度此处须为 4的倍数
{unsigned int Offset; unsigned short int Size; unsigned char Key; char cJiangYou;} // cJiangYou打酱油

char MsgErr[]=“Wrong Key!”,MsgSn[]="Serial No.: ",MsgMD9[]="MD9: ";

文件下载

话说这些文件被我放在我的“图床”里了哈哈哈,有人能get到我的笑点吗
VxCrp2018A1.VDF
VxCrp2018A2.VDF
VxCrp2018A3.VDF
VxCrp2018A4.VDF
VxCrp2018A5.VDF
VxCrp2018A6.VDF
VxCrp2018A7.VDF

思路

真的很简单就是按照题目模拟就行了,没有特别的,这道题的文件结构很简单也用不到KMP,所以就不多解释了

代码

#include <stdio.h>
#include <string.h>
struct key{unsigned int offset;unsigned short size;unsigned char K;
}table;
int main(){char pos[20],ciph[10000];int N,i,j = 1,s,m;scanf("%s\n%d",pos,&N);FILE *fp = fopen(pos,"rb");for(i = 0;i < 5;i++){fseek(fp,(N-1)*8+i*0x210,0);fread(&(table.offset),7,1,fp);fseek(fp,table.offset,0);fread(ciph,table.size,1,fp);ciph[0] += table.K;if(ciph[0] == 'W') continue;else{while(j < table.size){ciph[j] += table.K;if(ciph[j] == 'e' && ciph[j - 1] == 'S') s = j - 1;if(ciph[j] == 'D' && ciph[j - 1] == 'M') m = j - 1;j ++;}break;}}printf("XH: %02d\n",N);printf("SN: %.19s\n",ciph + s + 12);printf("M9: %.32s\n",ciph + m + 5);
}

或者

#include <stdio.h>
#include <string.h>
struct key{unsigned int offset;unsigned short size;unsigned char K;
}table;
int main(){char pos[20],ciph[10000];int N,i;scanf("%s\n%d",pos,&N);FILE *fp = fopen(pos,"rb");for(int i = 0;i < 5;i++){fseek(fp,(N-1)*8+i*0x210,0);fread(&(table.offset),7,1,fp);fseek(fp,table.offset,0);fread(ciph,table.size,1,fp);for(int j = 0;j < table.size;j++) ciph[j] += table.K;if(!strncmp(ciph,"Wrong Key!",9)) continue;else break;}printf("XH: %02d\n",N);for(i = 0;;i++){if(strncmp(ciph+i,"Serial No.: ",11)==0){printf("SN: %.19s\n",ciph + i + 12);break;}}for(;;i++){if(strncmp(ciph+i,"MD9: ",4)==0){printf("M9: %.32s\n",ciph + i + 5);break;}}
}

java版

鉴于有个小朋友一直想要JAVA版,所以写了一下(java对二进制的读取是真滴难受,有大佬有好的方法请教给我)

import java.io.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));String pos = reader.readLine();int N = Integer.parseInt(reader.readLine());FileInputStream fp = new FileInputStream(pos);byte[] ciph = null;int s = 0;int m = 0;for (int i = 0; i < 5; i++) {fp.getChannel().position((N - 1) * 8 + i * 0x210);DataInputStream dis = new DataInputStream(fp);//下面这三行就是我吐槽的地方了int offset = Integer.reverseBytes(dis.readInt());int size = dis.readUnsignedShort();int K = dis.readUnsignedByte();Key table = new Key(offset, size, K);fp.getChannel().position(table.offset);ciph = new byte[table.size];fp.read(ciph);ciph[0] += table.K;if (ciph[0] == 'W') continue;else {int j = 0;for(int t = 0; t < table.size; t ++) ciph[t] += table.K;while (++j < table.size){if (ciph[j] == 'e' && ciph[j - 1] == 'S') s = j - 1;if (ciph[j] == 'D' && ciph[j - 1] == 'M') m = j - 1;if(s != 0 && m != 0) break;//都找到就可以走了}break;}}fp.close();System.out.printf("XH: %02d\n", N);System.out.printf("SN: %.19s\n", new String(ciph, s + 12, 19));System.out.printf("M9: %.32s\n", new String(ciph, m + 5, 32));}
}class Key {int offset;int size;int K;public Key(int offset, int size, int K) {this.offset = offset;this.size = size;this.K = K;}
}

【综合】简单加解密——寻找序列号相关推荐

  1. Python实现文件简单加解密

    目录 一.基础知识 二.加解密算法 1.导入运行库 2.定义生成密钥函数 3.定义加解密单元 4.加密文件 5.解密文件 三.测试 一.基础知识 python中的异或操作符为 ^ ,也记作XOR,按位 ...

  2. android 文本 加密解密,Android文件简单加解密

    前言 在Android应用开发中,有时需要把一些内容以文件的方式保存到sdcard上,这时我们需要考虑数据的安全性,这就涉及到文件的加解密,这里简单介绍一种文件的加解密实现方法. 实现方案 我们在读写 ...

  3. c语言文件嚏怎么写,巩固C语言(十二)----文件加解密

    一 文件的简单加解密----按照字节简单加减进行加解密 #define _CRT_SECURE_NO_WARNINGS #include #include //按照字节的方式进行加解密 //加密 vo ...

  4. 自动加解密请求包响应包插件(autoDecoder)

    之前所立的一个flag:明文传,明文响应:密文传,密文响应 0x01 背景 当数据包里都是密文,我们无从下手:就算是获得了加解密的一些关键信息,能解密出来,但是每个数据包我们都需要慢慢解密,请求包需要 ...

  5. aes js 加盐值 解密_cryptoJS AES 加解密简单使用

    简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...

  6. AES方式加解密的简单介绍

    上面一篇文章介绍了使用DES方式进行加解密( DES方式加解密的简单介绍),我们说了DES由于使用8个字节(64bit)密钥进行加解密,所以安全性不够(当然这里的不够都是相对的),所以现在使用了密钥更 ...

  7. DES方式加解密的简单介绍

    其实本来想好好研究下DES.AES.MD5等这些加解密方式的,于是就最先研究了比较早使用的DES,去看了相关文档后发现,我去这变换也太多了吧,这这这,真要细细研究下来,那不得花很长的时间,于是准备先放 ...

  8. GPG对文件加解密的简单实现

    解密时如何覆盖已经存在的解密后文件,而不是弹出询问框是否覆盖 初识GPG 加解密实现 gui加解密 生成密钥 命令行方式加解密 信任度设置 方法一 方法二 参考链接 解密时如何覆盖已经存在的解密后文件 ...

  9. 使用Shaka-packager进行加解密的简单实例

    文章目录 1.环境 2.获取工具 3.准备视频文件 4.DASH加密 5.DASH解密 6.HLS的加解密 Shaka Packager是用于DASH和HLS打包和加密的工具和媒体打包SDK. 支持W ...

最新文章

  1. 神经网络 Stanford UFLDL
  2. HDU 1754 I Hate It(线段树单点更改、区间查找最大值)
  3. luabind-0.9.1在windows、linux下的使用详解及示例
  4. java如何解压rar文件怎么打开,java解压rar文件
  5. 安装kali linux 2017.1 【二、安装VMware-tools 以及相关问题处理】
  6. 反射和多态的实现原理详解以及区别
  7. 创建ServerSocket出错Permission denied
  8. 通过设置关联菜单建立excel记账本
  9. 微信小程序uniapp实现小图标转成SVN代码
  10. 游戏策划学习:笔试整理
  11. POI设置excel格式为文本格式
  12. ecshop模板如何修改详细图解
  13. 简述python语言的主要功能和特点_计算机考试简答题
  14. 996不如驴,为啥这些精英会下嫁?附995公司名单大全全
  15. 柳叶刀| 肠道微生物群在神经系统疾病中的作用
  16. XTU OJ 1375 Fibonacci
  17. 自己制作Chrome便携版实现多版本共存
  18. 采药问题 c语言程序,采药 题解
  19. THz:通信系统的研究现状与应用展望
  20. Robotics: Computational Motion Planning(路径规划)笔记(一):基于图搜索的方法-Grassfire、Dijkstra和A*算法

热门文章

  1. linux dns子域服务器,DNS主从复制及子域(三)
  2. 量子计算 9 量子力学与现实世界
  3. 算法梳理boosting\bagging\RF(1)
  4. C.5 Paddlenlp之UIE关系抽取模型【高管关系抽取为例】
  5. 华章IT图书书讯(2012年第6期)
  6. Linux编程之GCC编译工具实战-夏曹俊-专题视频课程
  7. java基础算法 闰年判断
  8. custom validator and validationGroup
  9. 重现DenseNet网络(基于keras)
  10. Mac Unity编辑器中Process调用Python脚本。