亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 13005 | 回復(fù): 14
打印 上一主題 下一主題

搜狗在線測(cè)評(píng)題目(信息編碼的程序),高手請(qǐng)進(jìn),請(qǐng)指教! [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-09-08 18:49 |只看該作者 |倒序?yàn)g覽
本帖最后由 snowboy9859 于 2011-09-09 19:03 編輯

以下程序是一個(gè)信息編碼的程序,閱讀其encode部分,并補(bǔ)全其decode部分
最后運(yùn)行程序,會(huì)打印出的一句話。這句話就是我們要求的答案。 (本段代碼遵循c99標(biāo)準(zhǔn),gcc編譯請(qǐng)加-std=c99)

注意!這句話是用GBK編碼的!

  1. #include  <stdio.h>
  2. #include  <stdlib.h>
  3. #include  <stdint.h>
  4. #include  <assert.h>
  5. #include  <string.h>


  6. int  encode(const  void*  raw_in,  void*  raw_out,  uint32_t  password,  size_t  len)
  7. {
  8.         const uint8_t* in=(const  uint8_t*)raw_in;
  9.         uint8_t* out=(uint8_t*)raw_out;
  10.        
  11.         uint32_t seed = password ^ 0x164ba504u;
  12.         for (size_t i = 0; i < len; ++i)
  13.         {
  14.                 uint8_t  a = (in[i] ^ seed) >> 4; //將in[i]的高四位異或后的結(jié)果存放在a的低四位中
  15.                 uint8_t  b  = ((((uint32_t)in[i]) << 12)^seed)>>(12-4); //將in[i]的低四位異或后放在b的高四位中
  16.                 a &= 15; //將未存儲(chǔ)有效數(shù)據(jù)位清零
  17.                 b &= 240; //將未存儲(chǔ)有效數(shù)據(jù)位清零
  18.                 a = 15 & (a ^(b <<3)); //這句約等于沒(méi)有,不起任何作用起誤導(dǎo)作用
  19.                 out[i] = a | b; //把經(jīng)過(guò)轉(zhuǎn)換的數(shù)據(jù)相或組成新的數(shù)據(jù)
  20.                 seed = ((seed ^ out[i]) * 48475829 + out[i]); //通過(guò)通式更新seed
  21.         }
  22. }


  23. int  decode(const void* raw_in, void* raw_out, uint32_t password, size_t  len)
  24. {
  25.         const  uint8_t* in = (const  uint8_t*)raw_in;
  26.         uint8_t* out = (uint8_t*)raw_out;
  27.        
  28.         uint32_t seed = password ^ 0x164ba504u;
  29.         for(size_t  i = 0  ;  i < len; ++i)
  30.         {        
  31.                  //  請(qǐng)?jiān)诖颂幯a(bǔ)全代碼 (本人不才,下面代碼為自己給出尚且通過(guò)調(diào)試未得到預(yù)期的答案,請(qǐng)高手指教)
  32.         uint8_t  a = in[i] & 15;//取出in[i]的低四位放入a中
  33.         uint8_t  b = in[i] & 240;//取出in[i]的高四位放入b中
  34.         uint8_t  c = ((a<<4)^seed)&240;//運(yùn)用c=a^b;a=c^b;的原理,將原來(lái)的數(shù)據(jù)還原,并清空無(wú)效的數(shù)據(jù)位
  35.         unit8_t  d = (((((uint32_t)b)<<8)^seed)>>12)&15;//運(yùn)用c=a^b;a=c^b;的原理,將原來(lái)的數(shù)據(jù)還原,并清空無(wú)效的數(shù)據(jù)位
  36.         out[i] = c | d;//將還原后的高四位和低四位相或
  37.         seed  =  ((seed  ^  in[i])  *  48475829  +  in[i]);//保證編碼和解碼用的一個(gè)密碼;(編碼中的out[i]就是解碼中的in[i])
  38.         }
  39. }
  40. int  main()
  41. {
  42.         const uint8_t buf1[] = {0xf2,  0x60,  0xab,  0xa6,  0xa5,  0xbe,  0xc9,  0x39,  0x15,  0xdf,  0xe6,  0x06,  0x47,  0x02,  0xa6,  0xfb,  0xcb,  0x60,  0x76,  0xf0,  0x08,  0xfb,  0x92,  0xe4,  0xaf,  0x4d,  0x22,  0x7a,  0x6a,  0xfe,  0xcf,  0x85,  0x25,  0x25,  0xfc,  0x31,  0xe4,  0xa2,  0x10,  0x2b,  0xd8,  0x50,  0x8f,  0x7f,  0x3f,  0xf0,  0xde,  0xee,  0x30,  0x96,  0x24,  0x7f,  0x9f,  0x56,  0x06,  0x21,  0xd3,  };
  43.         uint8_t buf2[100] = {};
  44.         const uint32_t password = 0xee90efe9u;
  45.         const size_t len  = sizeof(buf1);
  46.         decode(buf1, buf2, password,  len);
  47.         printf("%s\n", buf2);
  48. }
復(fù)制代碼
要補(bǔ)全之后求答案

在此將測(cè)試程序貼出:(此程序可以在vc下直接編譯運(yùn)行)
  1. #include  <stdio.h>
  2. #include  <stdlib.h>
  3. //#include  <stdint.h>
  4. #include  <assert.h>
  5. #include  <string.h>

  6. typedef unsigned int uint32_t;
  7. typedef unsigned char uint8_t;

  8. int  encode(const  void*  raw_in,  void*  raw_out,  uint32_t  password,  size_t  len)
  9. {
  10.         const  uint8_t*  in  =  (const  uint8_t*)raw_in;
  11.         uint8_t*  out  =  (uint8_t*)raw_out;
  12.        
  13.         uint32_t  seed  =  password  ^  0x164ba504u;
  14.         for  (size_t  i  =  0  ;  i  <  len;  ++i)  {
  15.                 uint8_t  a  =  (  in[i]  ^  seed  )  >>  4;
  16.                 uint8_t  b  =  (  (  ((uint32_t)in[i])  <<  12  )  ^  seed  )  >>  (12-4);
  17.                 a  &=  15;
  18.                 b  &=  240;
  19.                 a  =  15  &  (  a  ^  (b  <<  3));
  20.                 out[i]  =  a  |  b;
  21.                 seed  =  ((seed  ^  out[i])  *  48475829  +  out[i]);
  22.         }

  23.         return 0;
  24. }


  25. int  decode(const  void*  raw_in,  void*  raw_out,  uint32_t  password,  size_t  len)
  26. {
  27.         const  uint8_t*  in  =  (const  uint8_t*)raw_in;
  28.         uint8_t*  out  =  (uint8_t*)raw_out;
  29.        
  30.         uint32_t  seed  =  password  ^  0x164ba504u;
  31.         for  (size_t  i  =  0  ;  i  <  len;  ++i)  {
  32.         out[i] = (((in[i]<<4)^seed)&0xF0) | (((in[i]>>4)^(seed>>12))&0x0F);

  33.     seed = ((seed ^ in[i]) * 48475829 + in[i]);
  34.                                
  35.                                 //  請(qǐng)?jiān)诖颂幯a(bǔ)全代碼
  36.         }
  37.         return 0;
  38. }
  39. int  main(void)
  40. {
  41.         const  uint8_t  buf1[]  =  {0xf2,  0x60,  0xab,  0xa6,  0xa5,  0xbe,  0xc9,  0x39,  0x15,  0xdf,  0xe6,  0x06,  0x47,  0x02,  0xa6,  0xfb,  0xcb,  0x60,  0x76,  0xf0,  0x08,  0xfb,  0x92,  0xe4,  0xaf,  0x4d,  0x22,  0x7a,  0x6a,  0xfe,  0xcf,  0x85,  0x25,  0x25,  0xfc,  0x31,  0xe4,  0xa2,  0x10,  0x2b,  0xd8,  0x50,  0x8f,  0x7f,  0x3f,  0xf0,  0xde,  0xee,  0x30,  0x96,  0x24,  0x7f,  0x9f,  0x56,  0x06,  0x21,  0xd3,  };
  42.         uint8_t  buf2[100]  =  {0};
  43.         const  uint32_t  password  =  0xee90efe9u;
  44.         const  size_t  len  =  sizeof(buf1);
  45.         decode(buf1,  buf2,  password,  len);
  46.         printf("%s\n",  buf2);

  47.         return 0;
  48. }
復(fù)制代碼
運(yùn)行結(jié)果

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-09-08 20:27 |只看該作者
傳說(shuō)中的逆向。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-09-09 14:23 |只看該作者
回復(fù) 2# davelv


    請(qǐng)指教,我貼出了自己的思路,請(qǐng)指點(diǎn)!

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯(lián)賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯(lián)賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現(xiàn)代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術(shù)圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [報(bào)告]
發(fā)表于 2011-09-09 15:32 |只看該作者
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4. #include <assert.h>
  5. #include <string.h>

  6. int encode(const void* raw_in, void* raw_out, uint32_t password, size_t len)
  7. {
  8.         const uint8_t* in = (const uint8_t*)raw_in;
  9.         uint8_t* out = (uint8_t*)raw_out;

  10.         uint32_t seed = password ^ 0x164ba504u;
  11.         for (size_t i=0; i<len; ++i) {
  12.                 /// 俺不得不說(shuō)一句,下面這段算法真是太爛了,哪個(gè)**公司寫的呀
  13.                 uint8_t a = ( in[i] ^ seed ) >> 4;
  14.                 uint8_t b = ( ( ((uint32_t)in[i]) << 12 ) ^ seed ) >> (12-4);
  15.                 a &= 15;
  16.                 b &= 240;
  17.                 a = 15 & ( a ^ (b << 3));
  18.                 out[i] = a | b;
  19.                 seed = ((seed ^ out[i]) * 48475829 + out[i]);
  20.         }

  21.         return 0;
  22. }


  23. int decode(const void* raw_in, void* raw_out, uint32_t password, size_t len)
  24. {
  25.         const uint8_t* in = (const uint8_t*)raw_in;
  26.         uint8_t* out = (uint8_t*)raw_out;

  27.         uint32_t seed = password ^ 0x164ba504u;
  28.         for (size_t i=0; i<len; ++i) {
  29.                 // 隨手寫就,沒(méi)仔細(xì)驗(yàn)證,錯(cuò)了別怪我
  30.                 out[i] = (((in[i]<<4)^seed)&0xF0) | (((in[i]>>4)^(seed>>12))&0x0F);
  31.                 seed = ((seed ^ in[i]) * 48475829 + in[i]);
  32.         }

  33.         return 0;
  34. }
  35. int main()
  36. {
  37.         const uint8_t buf1[] = {0xf2, 0x60, 0xab, 0xa6, 0xa5, 0xbe, 0xc9, 0x39, 0x15, 0xdf, 0xe6, 0x06, 0x47, 0x02, 0xa6, 0xfb, 0xcb, 0x60, 0x76, 0xf0, 0x08, 0xfb, 0x92, 0xe4, 0xaf, 0x4d, 0x22, 0x7a, 0x6a, 0xfe, 0xcf, 0x85, 0x25, 0x25, 0xfc, 0x31, 0xe4, 0xa2, 0x10, 0x2b, 0xd8, 0x50, 0x8f, 0x7f, 0x3f, 0xf0, 0xde, 0xee, 0x30, 0x96, 0x24, 0x7f, 0x9f, 0x56, 0x06, 0x21, 0xd3, };
  38.         uint8_t buf2[100] = {};
  39.         const uint32_t password = 0xee90efe9u;
  40.         const size_t len = sizeof(buf1);
  41.         decode(buf1, buf2, password, len);
  42.         printf("%s\n", buf2);

  43.         return 0;
  44. }
復(fù)制代碼

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯(lián)賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯(lián)賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現(xiàn)代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術(shù)圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
5 [報(bào)告]
發(fā)表于 2011-09-09 15:34 |只看該作者
/// 俺不得不說(shuō)一句,下面這段算法真是太爛了,哪個(gè)**公司寫的呀
------
哈哈,發(fā)現(xiàn)一個(gè)奧妙,原來(lái)這個(gè)bbs會(huì)自動(dòng)把一些詞匯替換成**,我原文說(shuō)的是“S13”的中文。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2011-09-09 16:24 |只看該作者
回復(fù) 4# bruceteen


    和我貼的代碼是一樣的結(jié)果;不能用啊,能不能再幫我看看,最好能夠調(diào)試一下,這么修改輸出亂碼

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2011-09-09 16:26 |只看該作者
回復(fù) 5# bruceteen


    搜狐公司寫的,哈哈

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯(lián)賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯(lián)賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現(xiàn)代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術(shù)圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
8 [報(bào)告]
發(fā)表于 2011-09-09 16:51 |只看該作者
回復(fù)  bruceteen


    和我貼的代碼是一樣的結(jié)果;不能用啊,能不能再幫我看看,最好能夠調(diào)試一下,這么修改輸出亂碼
snowboy9859 發(fā)表于 2011-09-09 16:24


哦,我測(cè)試了一下代碼,你的代碼和我的代碼都輸出是“搜狗搜索是全球首個(gè)中文網(wǎng)頁(yè)收錄量達(dá)到100億的搜索引擎。。 

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2011-09-09 17:00 |只看該作者
回復(fù) 8# bruceteen


    你在哪個(gè)環(huán)境下編譯運(yùn)行的?我在gcc上沒(méi)結(jié)果,亂碼,難道不能顯示中文?

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
10 [報(bào)告]
發(fā)表于 2011-09-09 17:03 |只看該作者
這個(gè)除了考察人的眼力外, 真不知道比簡(jiǎn)單的位運(yùn)算題目好到哪里去
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP