解密模擬題

2021-06-16 22:52:00 字數 1401 閱讀 1466

現有加密二進位制檔案乙份,按規則進行解碼

a. 轉碼後檔案由0x1b, 0x4c開頭

b. 跳過原始檔前六個位元組,每兩個位元組為乙個迴圈節

c. 獲取初始key,由md5("hello" + 檔名)的前8位構成

d. 對初始key進行如下操作: (高4位 * 0x41a70000 & 0x7fff0000 + 低4位 * 0x41a7 + (高4位 * 0x41a7) >> 15) 

e. 獲得變換後的key,並右移15位獲得小節key,與原始檔7,8位元組(即第乙個迴圈節)進行異或,獲得解密結果

f. 後面每個迴圈節,由當前變換後的key計算小節key與原始檔進行異或,獲得解密結果

g. 最終輸出檔案

#include

#include

#include

using namespace std;

unsigned  int getkey(unsigned  int key)

int main()

;printf("%s",hz);

unsigned

int key;

key=0x105169c3;

char  ch[2];

int a=0;

char str;

file * fp=fopen("d:\\assert.lua","rb"); //輸入重定向,輸入資料將從in.txt檔案中讀取

file * fp1=fopen("d:\\result.txt","a+"); //輸出重定向,輸出資料將儲存在out.txt檔案中

if(fp == null||fp == null)

int num;

while((num=fread( &str, sizeof( char ), 1, fp )),num!=0)

if(a&1)

}else

char low[2];

//char high[2];

low[0]=newkey&0x00ff;

low[1]=(newkey>>8)&0x00ff;

//high[0]=(newkey>>16)&0x00ff;

//high[1]=((newkey>>16)>>8)&0x00ff;

low[1]^=ch[0];

low[0]^=ch[1];

fwrite( &low[1], sizeof( char ), 1, fp1 );

fwrite( &low[0], sizeof( char ), 1, fp1 );

//if(a==8)

//printf("%s%s\n",low[1],low[0]);}}

fclose(stdin);//關閉檔案

fclose(stdout);//關閉檔案*/

return 0;

}

GDOI模擬2015 08 18 解密

給定一篇由若干個單詞構成的原文,還有乙個由若干個單詞組成的句子。加密文是由原文單詞通過某個單詞 可能一樣 替換而成的,原文相同單詞一定會被相同加密文單詞替換。沒有兩個不同的原文單詞被同乙個加密文單詞替換。要求找出句子在加密文中第一次出現的位置。原文本元總和不超過 1000000 句子字元總和不超過 ...

GDOI2016模擬8 18解密

題目 mirko要解一段加密文,但他只知道某乙個句子是原文的一部分。你的任務是要在密文中找到第乙個對應這個句子的地方。文段是通過用某個單詞 可能和原文一樣的單詞 替換原始文段每乙個單詞來加密的。如果某些單詞在原文出現一次以上,就會使用相同的替換單詞來替換。沒有兩個不同的單詞使用相同的替換單詞。單詞是...

模擬題總結

1 模擬題的常見題型 1 打表,列出所有可能 資料較少,規律明顯 2 分階段求解,自頂向下,先寫出主程式,然後輸入輸出,判斷條件這些直接用函式實現,簡化步驟。3 模擬操作,有兩種思路,一是直接模擬,得出結果 二是先記錄所有操作,然後模擬每個操作。4 日期天數,可以逐年,逐月,逐日的相加,然後求星期之...