日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
流密碼與RC4密碼初認(rèn)識

一、前言

成都創(chuàng)新互聯(lián)公司主要從事做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)茄子河,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

流密碼是對稱密碼算法,是私鑰密碼系統(tǒng)中的一個(gè)分組。流密碼的轉(zhuǎn)換是隨”變換”而變換的,像水流一樣源源不斷的產(chǎn)生,是對稱密碼算法,從明文輸入流逐位或逐字節(jié)產(chǎn)生密文輸出。今天我們來初認(rèn)識一下流密碼和使用最廣泛的流密碼RC4。

二、什么是流密碼

流密碼是私鑰體質(zhì)下的一個(gè)對稱加密,類似于簡單算法的”一次一密”,不過”一次一密”是真正的理想密碼只要不能獲得密碼亂碼本,就是完全保密。流密碼使用的是偽隨機(jī)數(shù)流,利用密鑰產(chǎn)生一個(gè)密鑰流Z=Z1Z2Z3…,然后利用此密鑰流依次對明文X=X0X1X2…進(jìn)行加密,這樣產(chǎn)生的密碼就是序列密碼,也稱為流密碼。

設(shè)計(jì)流密碼的因素

  • 加密序列的周期要長,若出現(xiàn)重復(fù)的周期過短,容易被破解
  • 密鑰流應(yīng)該盡可能地接近真正隨機(jī)數(shù)流的特征
  • 密鑰長度要長,以避免瓊窮舉攻擊

流密碼就是使用較短的一串?dāng)?shù)字(叫它密鑰吧),來生成無限長的偽隨機(jī)密碼流,當(dāng)然事實(shí)上只需要生成和明文長度一樣的密碼流就夠了。

流密碼是將明文劃分成字符(如單個(gè)字母),或其編碼的基本單元(如0,1數(shù)字),字符分別與密鑰流作用進(jìn)行加密,解密時(shí)以同步產(chǎn)生的同樣的密鑰流實(shí)現(xiàn)。

通俗的講,產(chǎn)生一串序列來作為加密的密鑰流,從密鑰流中按規(guī)則依次選取密鑰,這些不同的密鑰分別來加密每個(gè)字符。

流密碼的強(qiáng)度依賴于密鑰序列的隨機(jī)性和不可預(yù)測性。

核心在于密鑰流生成器的設(shè)計(jì)。

要保證收發(fā)兩端密鑰流的精確同步。

  • 種子密鑰
  • 信息流(明文流)
  • 密文流
  • 密鑰流

由此流密碼的基礎(chǔ)上,用較短的密鑰產(chǎn)生無限長的密碼流的方法非常多,其中有一種就叫做RC4。

三、RC4算法基礎(chǔ)介紹

RC4加密算法是大名鼎鼎的RSA三人組中的頭號人物Ron Rivest在1987年設(shè)計(jì)的密鑰長度可變的流加密算法簇。RC4算法是一種在電子信息領(lǐng)域加密的技術(shù)手段,用于無線通信網(wǎng)絡(luò),是一種電子密碼。

在介紹RC4前,說說那個(gè)“相加”運(yùn)算怎么實(shí)現(xiàn)?,F(xiàn)在我們把明文的信息限制在Ascii碼字符集內(nèi)(它已經(jīng)能表示所有的英文資料了)

每個(gè)字符是一個(gè)比特,占8位。

假設(shè)明文是abc,

a、b、c的ascii值分別為

 
 
 
 
  1. 97、98、99 

二進(jìn)制形式為

 
 
 
 
  1. 01100001、01100010、01100011 

密鑰流和明文長度一樣,假設(shè)是sdf,同樣可以得到二進(jìn)制流

 
 
 
 
  1. 01110011、01100100、01100110 

讓他們在對應(yīng)位做異或運(yùn)算就可以得到密文了c語言有^運(yùn)算符來實(shí)現(xiàn)“相加”的操作。

我們就直接對字符進(jìn)行“相加”即

 
 
 
 
  1. a^s, b^d, c^f 

二進(jìn)制形式為

 
 
 
 
  1. 00010010、00000110、00000101 

它們分別表示

ascii碼值為

 
 
 
 
  1. 18、6、5 

的字符,在文本編輯器里打開是亂碼,沒有關(guān)系,反正是密文嘛

四、RC4

該算法是一個(gè)可變密鑰長度、面向字節(jié)操作的流密碼。該算法以隨機(jī)置換作為基礎(chǔ),其密碼周期很可能大于10^100,且該算法的運(yùn)行速度很快。

RC4被用于為網(wǎng)絡(luò)瀏覽器和服務(wù)器間通信而制定的SSL/TLS(安全套接字協(xié)議/傳輸層安全協(xié)議)標(biāo)準(zhǔn)中,以及作為IEEE 801.11無線局域網(wǎng)標(biāo)準(zhǔn)一部分的WEP(Wired Equivalent Privacy)協(xié)議和新的WiFi受保護(hù)訪問協(xié)議(WAP)中。

從這些應(yīng)用來看,RC4構(gòu)成了當(dāng)今網(wǎng)絡(luò)通信的非常重要的部分,因此這個(gè)算法非常重要。

算法描述

  • 首先你指定一個(gè)短的密碼,儲存在key[MAX]數(shù)組里,還有一個(gè)數(shù)組S[256],令S[i]=i。然后利用數(shù)組key來對數(shù)組S做一個(gè)置換,也就是對S數(shù)組里的數(shù)重新排列,排列算法為
  • 利用上面重新排列的數(shù)組 S 來產(chǎn)生任意長度的密鑰流
  • 用T產(chǎn)生S 的初始置換,置換偽碼如下,因?yàn)閷的操作僅是交換,S仍然包含所有值為 0-255的元素。
  • 因?yàn)閷 的操作僅是交換,S仍然包含所有值為0-255的元素。

算法代碼

 
 
 
 
  1. # -*- coding: utf-8 -*-   
  2.  #by yuhao   
  3.  import random, base64   
  4.  from hashlib import sha1   
  5.  def crypt(data, key):   
  6.      x = 0   
  7.      box = range(256)   
  8.      for i in range(256):  
  9.          x = (x + box[i] + ord(key[i % len(key)])) % 256  
  10.          box[i], box[x] = box[x], box[i]   
  11.      x = y = 0   
  12.      out = []   
  13.      for char in data:   
  14.          x = (x + 1) % 256  
  15.          y = (y + box[x]) % 256   
  16.          box[x], box[y] = box[y], box[x]   
  17.          out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))   
  18.      return ''.join(out)      
  19.  def tencode(data, key, encode=base64.b64encode, salt_length=16):    
  20.      salt = ''  
  21.      for n in range(salt_length):  
  22.          salt += chr(random.randrange(256))  
  23.      data = salt + crypt(data, sha1(key + salt).digest())   
  24.      if encode:   
  25.          data = encode(data)  
  26.      return data   
  27.  def tdecode(data, key, decode=base64.b64decode, salt_length=16):   
  28.      """RC4 decryption of encoded data"""   
  29.      if decode:   
  30.          data = decode(data)  
  31.      salt = data[:salt_length]  
  32.      return crypt(data[salt_length:], sha1(key + salt).digest())  
  33.  # 需要加密的數(shù)據(jù)   
  34.  data = 'freebuf hello'   
  35.  # 密鑰   
  36.  key = 'yuhao'  
  37.  # 加碼  
  38.  encoded_data = tencode(datadata=data, keykey=key)  
  39.  print encoded_data  
  40.  # 解碼  
  41.  decoded_data = tdecode(data=encoded_data, keykey=key)  
  42.  print decoded_data  

五、總結(jié)

不過這里有一個(gè)小問題,當(dāng)RC4的密鑰長度超過128位時(shí),目前沒有任何攻擊方法能夠破解。不過 WEP協(xié)議易受到一種特殊的攻擊方式攻擊,但這個(gè)問題本質(zhì)上并不在與RC4本身,而是RC4密鑰的產(chǎn)生途徑有漏洞


網(wǎng)站題目:流密碼與RC4密碼初認(rèn)識
路徑分享:http://www.5511xx.com/article/cdiedeo.html