現有加密二進位制檔案乙份,按規則進行解碼
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 日期天數,可以逐年,逐月,逐日的相加,然後求星期之...