2011-03-31 48 views
0

我正在試圖分析一個短的加密程序,並找出它使用的是哪種機制。什麼樣的密碼機制使用重複的異或?

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char * argv[]) { 
    long int key; 
    char * endptr; 

    key = strtol(argv[1], &endptr, 10); 

    srandom(key); 
    { /* now copy input to output through crypt transformation */ 
      char ch; 
      while (!feof(stdin)) { 
        putc((getc(stdin)^random())&0xFF, stdout); 
      } 
      fclose(stdout); 
    } 
} 

我可以簡單地遵循這一點,但我有麻煩試圖剷除它使用何種機制..

我看以下內容:

http://en.wikipedia.org/wiki/Public-key_cryptography

http://en.wikipedia.org/wiki/Block_cipher

http://en.wikipedia.org/wiki/Stream_cipher

http://en.wikipedia.org/wiki/Diffie-Hellman

我傾向於迭代塊cyphers,但我真的不知道在這一點上。

+1

以上都不是。您將無法在一行代碼中實現這些功能。想想更簡單。 – EJP 2011-03-31 00:42:32

+0

@EJP其實,這是一個非常簡單的流密碼。 – 2011-04-04 23:50:50

回答

2

你需要清楚地分辨出類別中的密碼。有:

  • 分組密碼,其在輸入的固定大小的塊
  • 流密碼,其上的數據流(在一個時間,即一個字節)

上述操作僅操作根據他們接受的輸入大小區分密碼;它與它們用於生成加密文本的機制無關。

關於這種機制,我們有:

  • 替代密碼
  • 換位密碼
  • 和許多其他類型的基本上是以上的組合,可能與多次迭代

所以試着先回答這個問題:

你的例子是流密碼還是分組密碼?請記住,這與無關,它如何加密

+0

感謝您這樣鋪設。那麼我將如何去決定加密密鑰的大小?我必須尋找內部的人嗎? – 2011-04-01 02:24:56

+0

@JohnRedyns:什麼是導致這個程序每次加密到不同密文的變量輸入?你用什麼變量/結構來存儲它?該存儲有多少位? – Jon 2011-04-01 02:30:50

+0

難道只是輸入字符串的長度嗎? – 2011-04-06 01:54:15

2

這是一個流密碼。密鑰是通過使用給定密鑰給srandom播種生成的。

在密碼學中,流密碼是其中明文 位通常由異或(XOR)操作 用僞隨機 密碼比特流(密鑰流), 組合的 對稱密鑰密碼。在流密碼中, 明文數字一次在 處加密一次,並且 連續數字的變換在 加密期間變化。

這就是你在這裏做的。 key是對稱密鑰,密碼流由random()生成。對srandom(key)的調用可確保只要您的密鑰相同,隨機流將保持一致。

+0

沒有其他機制使用srandom? – 2011-03-31 00:45:24

+0

查看我的更新。其他機制可以使用srandom;例如從一個較小的密鑰中提出一個64位密鑰。但是在這種情況下,隨機和隨機的目的遵循流密碼的定義。 – 2011-03-31 00:50:01

+0

當然,不言而喻,這是一個非常弱的密碼 - 隨機/隨機密碼不是安全的PRNG。 – 2011-04-04 23:51:30

相關問題