導航:首頁 > 源碼編譯 > rc4加密演算法實現

rc4加密演算法實現

發布時間:2023-03-25 17:15:21

❶ 求一個實現RC4加密演算法的第三方包,java

 曾經實驗室的帶動,加上最近在上網路安全與管理的專業選修課,對加密演算法有了濃厚的興趣。老師留了一次作業,用自己的學號為密鑰,加密一句話,使用RC4加密演算法。
   圖書館查找資料,發現RC4演算法還是比較容易理解的。於是動手實現出來。不多說廢話,還是貼代碼吧。我寫的注釋還算清楚。
   先貼一個含main函數的核心演算法類,有測試,可以看看最後輸出了什麼^.^
 
import java.io.UnsupportedEncodingException;
public class Arithmetic {
 
 
 public static void swap(int x,int y){
  int temp;
  temp=x;
  x=y;
  y=temp;
 }
 
 public static void main(String[] args) throws UnsupportedEncodingException {
   
  
  
  //  密鑰(我的學號)
  byte K[]={0,6,1,6,1,0,0,4};
  
  int S[]=new int[256];//狀態矢量S
  int T[]=new int[256];//臨時矢量T
//  初始化狀態矢量S,同時生成臨時矢量T 
  for(int i=0;i<256;i++){
   S[i]= i;
   T[i]=K[i%K.length];
  }
  //用T使S置換
  {
    int j=0;
    for(int i=0;i<256;i++){
       j=(j+(int)S[i]+(int)T[i])%256;
       swap(S[i],S[j]);
     }
  }
  
  
  int i = 0,j=0;
  boolean tt=true;
  int c=0;
  int t;
  byte k;//密鑰流的當前位元組
  byte C[]="套范續".getBytes();
  
  System.out.println(C[3]);
  byte P[]=new byte[C.length];
  while(c<6){
   i=(i+1)%256;
   j=(j+S[i])%256;
   swap(S[i],S[j]);
   t=((S[i]+S[j])%256);
   k=(byte) S[t];
//   C[c]=(byte) (k^P[c]);
//     System.out.print(C[c]+" ");
   P[c]=(byte) (k^C[c]);
     System.out.print(P[c]+" ");
   c++;
  }
   System.out.println(new String(P,"GBK")); 
//  byte rr[]={65};
//    System.out.println(new String(rr)); 
 }
}
  再來貼一下以界面展示的代碼,比較長。用的就是普通的jsp+servlet。
核心類:
public class RC4 {
// 密鑰(我的學號)
 byte K[]={0,6,1,6,1,0,0,4};
 
  void swap(int x,int y){
  int temp;
  temp=x;
  x=y;
  y=temp;
 }
 
 public String encrypt(String plaintext){
  String ciphertext=new String();
  int S[]=new int[256];//狀態矢量S
  int T[]=new int[256];//臨時矢量T
//  初始化狀態矢量S,同時生成臨時矢量T 
  for(int i=0;i<256;i++){
   S[i]= i;
   T[i]=K[i%K.length];
  }
  //用T使S置換
  {
    int j=0;
    for(int i=0;i<256;i++){
       j=(j+(int)S[i]+(int)T[i])%256;
       swap(S[i],S[j]);
     }
  }
  
  
  int i = 0,j=0;
  int c=0;
  int t;
  byte k;//密鑰流的當前位元組
  byte P[]=plaintext.getBytes();
  byte C[]=new byte[P.length];
  while(c<P.length){
   i=(i+1)%256;
   j=(j+S[i])%256;
   swap(S[i],S[j]);
   t=((S[i]+S[j])%256);
   k=(byte) S[t];
   C[c]=(byte) (k^P[c]);
     System.out.print(C[c]+" ");
   c++;
  }
   System.out.println(new String(C)); 
  ciphertext=new String(C);
  return ciphertext;
  
 }
 
 
 
}
 頁面:
home.jsp
<%@ page language="java" import="java.util.*,core.ChangeCharset" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'home.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 
 <link rel="stylesheet" type="text/css" href="styles.css">
 
  <script type="text/javascript">
     function doencrypt(){
        document.form1.domethod.value="encrypt";
        document.form1.submit();
     }
     function dodecipher(){
        document.form1.domethod.value="decipher";
        document.form1.submit();
     }
 
 
 
  </script>
  </head>
 
  <body>
 
 
  <%@ include file="header.jsp" %>
  <div id="show" >
 
  <form name="form1" method="post" action="Manage">
  <input type="hidden" name="domethod" />
    請輸入一句話:<input type="text" name="plainText" />
   <a href="javascript:void(0)" onclick="javascript:doencrypt();return false;">加密</a>
     </br>
     </br>
     <%String cipher=(String)request.getAttribute("cipher");
       if(cipher==null){
           cipher="";
       }
       String plain1=(String)request.getAttribute("plain1"); 
       if(plain1==null){
           plain1="";
       } 
      %>
    所得密文:<input type="text" name="cipherText" value="<%=cipher %>"  />
    <a href="javascript:void(0)" onclick="javascript:dodecipher();return false;">解密</a>
     </br>
     </br>
    所得明文:<input type="text" name="getPlain" value="<%=plain1 %>"  />
    </form>
    </div>
   <%@ include file="footer.jsp" %>
  </body>
</html>
header.jsp(這個沒什麼意思,但還是給出來吧,給初學html的朋友一些借鑒)
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<div id="header" align="center">
 
 <h1>RC4加密演算法測試系統</h1>
 <hr>

</div>
footer.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<div align="center">
    <hr>
    <table>
       <tr><td>Powered by Tasu</td></tr>
       <tr><td>Copyright@Tasusparty Studio 2009-2010 All rights reserved</td></tr>
   
    </table>
</div>
styles.css(給出來省事一些,諸位看起來方便)
body{
margin:0px;
padding:0px;
background: #E6EAE9;
font-family: "Lucida Sans Unicode", "宋體", "新宋體", Arial, Verdana, serif;
color:#4f6b72;
font-size:12px;
line-height:150%;
}
#show{
 margin:0px auto;
 padding:0px;
 width:200px;
 height:400px
 }
#header{
margin:30px auto;
}

 
處理的Servlet:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import core.ChangeCharset;
import core.RC4;
public class Manage extends HttpServlet {
 
 public Manage() {
  super();
 }
 
 public void destroy() {
  super.destroy(); // Just puts "destroy" string in log
  // Put your code here
 }
 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doPost(request,response);
 }
 
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("GBK"); //設置輸入編碼格式
  response.setContentType("text/html;charset=GBK"); //設置輸出編碼格式
        String domethod=request.getParameter("domethod");
       
        if(domethod.equals("encrypt")){
  String plain=request.getParameter("plainText");
  RC4 rc4=new RC4();
  String cipher=rc4.encrypt(plain);
  System.out.println(cipher);
  request.setAttribute("cipher", cipher);
  request.getRequestDispatcher("home.jsp").forward(request, response);
        }
        if(domethod.equals("decipher")){
      String cipher=request.getParameter("cipherText");
      RC4 rc4=new RC4();
      String plain=rc4.encrypt(cipher);
      
      request.setAttribute("plain1", plain);
      request.getRequestDispatcher("home.jsp").forward(request, response);
            }
 }
 
 public void init() throws ServletException {
  // Put your code here
 }
}(中網互贏 手機客戶端)

❷ RC4 與 DES 哪個演算法最安全

隨機密鑰加密演算法:RC4
位密碼演算法:DES 三重DES(Triple-DES)仍然是很安全的,但是也只是在別無他法的情況下的一個較好的選擇。顯然高級加密標准(AES)是一個更好的加密演算法,NIST用AES代替Triple-DES作為他們的標准(下面有更詳細的討論)。其他較好的演算法包括另外兩個AES的變種演算法Twofish和Serpent-也稱為CAST-128,它是效率和安全的完美結合。這幾個演算法不僅比DES更安全,而且也比DES的速度更快。為什麼要使用一些又慢又不安全的演算法呢?SHA1是一個哈希函數,而不是一個加密函數。作為一個哈希函數,SHA1還是相當優秀的,但是還需要幾年的發展才能用作加密演算法。如果你正在設計一個新系統,那麼謹記你可能會在若干年後用SHA1代替目前的演算法。我再重復一遍:只是可能。呵呵,希望能幫到你!謝謝望採納哦!

❸ RC4的介紹

RC4加密演算法是大名鼎鼎的RSA三人組中的頭號人物Ronald Rivest在1987年設計的密鑰長度可變的流加密演算法簇。之所以稱其為簇,是由於其核心部分的S-box長度可為任意,但一般為256位元組。該演算法的速度可以達到DES加密的10倍左右,且具有很高級別的非線性。RC4起初是用於保護商業機密的。但是在1994年9月,它的演算法被發布在互聯網上,也就不再有什麼商業機密了。RC4也被叫做ARC4(Alleged RC4——所謂的RC4),因為RSA從來就沒有正式發布過這個演算法。

❹ RC4的漏洞

由於RC4演算法加密是採用的xor,所以,一旦子密鑰序列出現了重復,密文就有可能被破解。關於如何破解xor加密,請參看Bruce Schneier的Applied Cryptography一書的1.4節Simple XOR,在此我就不細說了。那麼,RC4演算法生成的子密鑰序列是否會出現重復呢?由於存在部分弱密鑰,使得子密鑰序列在不到100萬位元組內就發生了完全的重復,如果是部分重復,則可能在不到10萬位元組內就能發生重復,因此,推薦在使用RC4演算法時,必須對加密密鑰進行測試,判斷其是否為弱密鑰。其不足主要體現於,在無線網路中IV(初始化向量)不變性漏洞。
而且,根據目前的分析結果,沒有任何的分析對於密鑰長度達到128位的RC4有效,所以,RC4是目前最安全的加密演算法之一,大家可以放心使用!
分布式代碼管理網站Github從2015年1月5日將停止對RC4的支持,RC4作為一種老舊的驗證和加密演算法易於受到黑客攻擊。這意味著,用戶在使用Windows XP系統上的IE瀏覽器時將無法進入github.com網站

❺ rc4演算法該怎樣寫一個完整的程序代碼用的是c/c++都行。

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

typedef unsigned long ULONG;
void rc4_init(unsigned char *s, unsigned char *data,unsigned Len) { //初始化函數
int i,j;
unsigned char k[256] = {0},tmp;
for(i = 0;i < 256;i++) {
s[i] = i;
k[i] = data[i%Len];
}
for(i = 0; i < 256; i++) {
j = (j + s[i] + k[i])%Len;
tmp = s[i];
s[i] = s[j]; //交換s[i]和s[j]
s[j] = tmp;
}
}

void rc4_crypt(unsigned char *s, unsigned char *Data, unsigned long Len) { //加解密
int i = 0, j = 0, t = 0;
unsigned long k = 0;
unsigned char tmp;
for(k = 0;k < Len;k++) {
i = (i + 1)%256;
j = (j + s[i])%256;
tmp = s[i];
s[i] = s[j]; //交換s[x]和s[y]
s[j] = tmp;
t = (s[i] + s[j])%256;
Data[k] ^= s[t];
}
}

int main() {
unsigned char s[256] = {0},st[256] = {0}; //S-box
char key[256] = "just for test";
char pData[512] = "待加密數據Data";
ULONG len = strlen(pData);
printf("pData = %s\n",pData);
printf("key = %s, length = %d\n\n",key,strlen(key));
rc4_init(s,(unsigned char *)key,strlen(key)); //初始化
printf("完成對S[i]的初始化,如下:\n\n");
for(int i = 0; i < 256; i++) {
printf("%-3d ",s[i]);
}
printf("\n\n");
for(i = 0; i < 256;i++) { //用st[i]暫時保留經過初始化的s[i],很重要的!!!
st[i] = s[i];
}
printf("已經初始化,現在加密:\n\n");
rc4_crypt(s,(unsigned char *)pData,len);//加密
printf("pData = %s\n\n",pData);
printf("已經加密,現在解密:\n\n");
rc4_init(s,(unsigned char *)key,strlen(key)); //初始化密鑰
rc4_crypt(st,(unsigned char *)pData,len);//解密
printf("pData = %s\n\n",pData);
return 0;
}

❻ 電腦應用如何加密

問題一:怎樣把電腦上的應用軟體加密 廈門天銳公司的綠盾加密軟體可以加密所有軟體生成的文檔。一般常用的已加到我們的軟體列表上。
Word、Excel、PowerPoint、金山WPS、寫字板、AutoCAD、Pro/E、UG、Solidworks、CAXA、Pretel DXP、開目CAD、 Soild Edge、Cimatron、Power Mill、Mentor、Esprit2004、3DMAX、犀牛、CorelDRAW、PhotoShop、Illustrator、中望CAD、浩辰CAD等、支持Visual C++、Delphi等,如果有特別的軟體或者沒有在這個列表上,可以自已添加。不需要廠家對新軟體的分析。
綠盾採用國際先進的驅動加密技術,因此從技術平台本身是具有應用程序無關性的,可以對任意的軟體和文件類型進行加密控制。
同時, 綠盾 也是國內 最先 一個完全開發策略庫,允許用戶自定義策略的加密軟體。用戶可以自己填寫需要控制的應用程序、文件類型,並可自己選擇加密的時機(如打開文件時加密、關閉文件時加密、修改文件時加密、重命名文件時加密等),同時可以自行定義對文件操作的許可權(如拒絕讀、拒絕寫、拒絕創建、拒絕重命名、拒絕刪除等)
《綠盾文件安全方案》
1.全新的驅動加密技術,直接在緩存中進行加解密,寫硬碟的速度更快,加解密效率更高,幾乎不改變windows運行速度。在windows緩存中保存的是密文,可以防止別有用心的人從windows緩沖中竊取明文數據,導致泄密。不但可以實現強制加密功能,而且也可以根據需要輕松的實現強制解密功能,更加符合企業的實際加密管理需求;
2.同時監控本地硬碟和網路驅動器的讀寫加密。對任何應用程序生成的任何文件進行加密控制。同時,透明加解密的過程中,不產生臨時文件;
3.採用國際先進的AES和RC4兩種加密演算法的結合,它採用國際公認的AES和RC4兩種加密演算法相結合,來對文件和密鑰進行加密,並為每個企業、每個部門、每個用戶都單獨分配一個獨立的密鑰,對每個文件加密都生成一個隨機密鑰。也就是說,同一個文件,分別加密兩次,兩次加密的密鑰都是不同的。其次,還因為它採用了IBM公司出品的160位高強度加密演算法,足以應付任何的惡意暴力破解;
4.加密後的文件始終處於加密狀態,拷貝到任何地方,在任何環境下都是加密的,不依賴於加密軟體。

問題二:如何給自己電腦中的軟體加密使用 軟體是不可以直接加密的,但是你可以給文件夾加密,把你用的軟體放在一個文件夾里,加密文件夾!下面是文件夾加密/解密方法
一、加密文件或文件夾
步驟一:打開Windows資源管理器。
步驟二:右鍵單擊要加密的文件或文件夾,然後單擊「屬性」。
步驟三:在「常規」選項卡上,單擊「高級」。選中「加密內容以便保護數據」復選框
在加密過程中還要注意以下五點:
1.要打開「Windows 資源管理器」,請單擊「開始→程序→附件」,然後單擊「Windows 資源管理器」。
2.只可以加密NTFS分區卷上的文件和文件夾,FAT分區卷上的文件和文件夾無效。(注意重裝系統時先解密,否則後果嚴重。)
3.被壓縮的文件或文件夾也可以加密。如果要加密一個壓縮文件或文件夾,則該文件或文件夾將會被解壓
4.無法加密標記為「系統」屬性的文件,並且位於systemroot目錄結構中的文件也無法加密。
5.在加密文件夾時,系統將詢問是否要同時加密它的子文件夾。如果選擇是,那它的子文件夾也會被加密,以後所有添加進文件夾中的文件和子文件夾都將在添加時自動加密。
二、解密文件或文件夾
步驟一:打開Windows資源管理器。
步驟二:右鍵單擊加密文件或文件夾,然後單擊「屬性」。
步驟三:在「常規」選項卡上,單擊「高級」。
步驟四:清除「加密內容以便保護數據」復選框。
同樣,我們在使用解密過程中要注意以下問題:
1.要打開「Windows資源管理器」,請單擊「開始→程序→附件」,然後單擊「Windows資源管理器」。
2.在對文件夾解密時,系統將詢問是否要同時將文件夾內的所有文件和子文件夾解密。如果選擇僅解密文件夾,則在要解密文件夾中的加密文件和子文件夾仍保持加密。但是,在已解密文件夾內創立的新文件和文件夾將不會被自動加密。
以上就是使用文件加、解密的方法!
加密後還是可以刪除的,不過可以隱藏掉你加密的文件。

問題三:怎樣給電腦軟體單個加密 1、修改文件後綴名。如:文檔文件後綴名為「.doc」的,更改為.jpg或其它後綴名,別人就無法查看該文件的內容了。
2、將文件隱藏。將不想讓別人看見的文件設為隱藏文件。
3、利用軟體進行加密。
4、直接加密。方法是:右鍵單擊所要加密的文件,選擇「屬性」,在彈出的對話框中找到最底下那一行,點擊「高級」,彈出一個「高級屬性」對話框,找到最下面一行,勾選「加密內容以便保護數據」,點擊「確定」即可。

問題四:電腦桌面上的應用程序圖標怎麼加密 你可以在網路上下載超級加密3000 這是一款功能強大的文件和文件夾加密和保護軟體。
超級加密3000有超快和最強的文件、文件夾加密功能、數據保護功能,文件夾、文件的粉碎刪除以及文件夾偽裝等功能。
超級加密 3000採用先進的加密演算法,使你的文件和文件夾加密後,真正的達到超高的加密強度,讓你的加密數據無懈可擊。
超級加密3000還支持加密文件的臨時解密,文件加密後,雙擊加密文件,在彈出密碼輸入對話框輸入正確的密碼選擇確定,該加密文件就處於臨時解密,文件使用完畢退出以後,它自動恢復到加密狀態,無需再加密。
超級加密3000是一款不可多得的文件加密軟體,您可以到網路上搜索超級加密3000給您的文件加密試試看。

問題五:怎樣對電腦軟體進行加密? 15分 可以部署一個加密軟體,企業用那種,完全能夠滿足題主的需求。
推薦下IP-guard
IP-guard是2001年推出的透明加密軟體,同時擁有成熟的防泄密解決方案,在各行各業都有知名企業的成功案例,產品擁有18大功能和7大解決方案。
IP-guard的透明加密技術採用了應用層結合驅動層的加密演算法,智能緩沖技術作為輔助,確保了加密速度和穩定性,擁有隻讀、強制、非強制三種加密模式,適用於企業內部文檔流通、伺服器文檔上傳下載、文檔外發、移動辦公四大場景,在備份這塊,IP-guard採用了備份伺服器、網路故障應急機制、明文伺服器三重災備技術保證了加密文檔的完整性。
一般加密軟體只會對文檔進行自動加密保護,但也可以對軟體的操作行為做審計和許可權限制,理論上是可以滿足題主的需求的,只不過這個需求感覺意義不大啊。

問題六:電腦軟體加密怎麼設置 可以使用超級加密3000試一下
超級加密3000採用國際上成熟的加密演算法和安全快速的加密方法,可以有效保障數據安全!
具體操作方法:
1下載安裝超級加密3000。
2 然後在需要加密的數據上單擊滑鼠右鍵選擇超級加密。
3 在彈出的文件加密窗口中設置文件加密密碼就OK了。

問題七:怎樣給電腦上的軟體設置密碼 軟體設置密碼需要看軟體本身是否具備這個功能,假如有密碼功能就可以設置密碼。
電腦可以設置登入密碼,在控制面板,賬號中心設置密碼即可。

問題八:怎麼設置電腦安裝軟體加密啊??? 軟體加密不知道文件夾加密倒是可以 裝個冰點還原每次開機都會還原到你原來的最佳狀態不管他們給你裝了什麼都重啟之後統統化為烏有
lockdir 文件夾加密軟體或許你有幫助下載地址我暫時沒有

問題九:電腦怎麼可以把軟體加密??? 下載加密軟體即可。
文件加密大師啥的。

問題十:電腦應用程序加密 Windows Installer右邊窗口中雙擊 禁用Windows Installer選中已啟用,點確定策略里啟用:禁用「添加/刪除程序」,再啟用下面的策略:控制台--用戶配置--管理模板--系統」中的「只運行許可的Windows應用程序」,在「允許的應用程序列表」里「添加允許運行的應用程序而讓你運行的程序限制又限制可以在組策略里作出限制,但只要使用者可以進入組策略,那他還是可以安裝文件的,設置的方法進入組策略後,進入用戶許可權設置里找到安裝文件項刪除所有用戶名就可以二、用超級兔子三、我的電腦上----右鍵選管理-----打開服務和應用程序裡面的服務------在右邊查找Windows Installer-----雙擊打開,將啟動類型改為已禁止這樣子大多數安裝程序就不能安裝了,因為他會禁止掉所有需要調用WINDOWS INSTALLER的安裝程序,尤其是那些*msi的肯定不能安裝的四、在控制面板里的用戶帳號裡面,建立一個帳號,不給安裝許可權,自己想安裝的時候就點右鍵選擇以管理員帳號來運行這個安裝程序,一些要修改系統文件的程序也用這個辦法來運行進管理員帳戶:gpedit.msc-計算機配置-WINDOWS設置-安全設置-用戶權利指派下面有裝載和卸載程序允許信任以委託六、設置用戶許可權給管理員用戶名加密 新建一個USER組里的用戶 讓他們用這個賬號登陸 安裝目錄下的就不能用了啟用多用戶登錄,為每個用戶設置許可權,最好只有管理者許可權的才能安裝程序還有,你要是2000、XP或者2003系統的話將磁碟格式轉換為NTFS格式的,然後設置上用戶,給每個用戶設置上許可權七、開啟GUEST賬戶,在管理員賬號中設置GUEST賬戶的各種許可權。別人玩的時候就用GUEST賬戶登錄系統。一般安裝、下載都可以限制了。記得你的管理員賬號要設置密碼哦!

❼ WIFI用什麼加密演算法

目前,無線網路中已存在好幾種加密技術,由於安全性能的不同,無線設備的不同技術支持,支持的加密技術也不同, 一般常見的有:WEP、WPA/WPA2、WPA-PSK/WPA2-PSK。

1、WEP安全加密方式

WEP(有線等效保密),一種數據加密演算法,用於提供等同於有線區域網的保護能力。它的安全技術源自於名為RC4的RSA數據加密技術,是無線區域網WLAN的必要的安全防護層。目前常見的是64位WEP加密和128位WEP加密。

2、WPA安全加密方式

WEP之後,人們將期望轉向了其升級後的WPA,與之前WEP的靜態密鑰不同,WPA需要不斷的轉換密鑰。

WPA採用有效的密鑰分發機制,可以跨越不同廠商的無線網卡實現應用,其作為WEP的升級版,在安全的防護上比WEP更為周密,主要體現在身份認證、加密機制和數據包檢查等方面,而且它還提升了無線網路的管理能力。

3、WAP2

WPA2是IEEE 802.11i標準的認證形式,WPA2實現了802.11i的強制性元素,特別是Michael演算法被公認徹底安全的CCMP(計數器模式密碼塊鏈消息完整碼協議)訊息認證碼所取代、而RC4加密演算法也被AES所取代。

目前WPA2加密方式的安全防護能力相對出色,只要用戶的無線網路設備均能夠支持WPA2加密,那麼恭喜,無線網路處於一個非常安全的境地。

(7)rc4加密演算法實現擴展閱讀

WPA/WPA2是一種最安全的加密類型,不過由於此加密類型需要安裝Radius伺服器,因此,一般普通用戶都用不到,只有企業用戶為了無線加密更安全才會使用此種加密方式,在設備連接無線WIFI時需要Radius伺服器認證,而且還需要輸入Radius密碼。

WPA-PSK/WPA2-PSK是我們現在經常設置的加密類型,這種加密類型安全性能高,而且設置也相當簡單,不過需要注意的是它有AES和TKIP兩種加密演算法。

php如何對文件進行RC4加密

1.原始鑰匙 key
2.md5(md5+常量) 加密原始key => mkey
3.mkey 作為AC4的密匙 ac_mkey
4.ac_mkey 對加密數據 進行 AC4 加密 得到AC4密碼
5.AC4密碼 在進行一次 AC4加密可還原 加密數據
簡單來說,一句話,用md5 做AC4的密匙
以下是代碼
<?php
/*
* rc4加密演算法
* $pwd 密鑰
* $data 要加密的數據
*/
function rc4 ($pwd, $data)//$pwd密鑰 $data需加密字元串
{
$key[] ="";
$box[] ="";

$pwd_length = strlen($pwd);
$data_length = strlen($data);

for ($i = 0; $i < 256; $i++)
{
$key[$i] = ord($pwd[$i % $pwd_length]);
$box[$i] = $i;
}

for ($j = $i = 0; $i < 256; $i++)
{
$j = ($j + $box[$i] + $key[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}

for ($a = $j = $i = 0; $i < $data_length; $i++)
{
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;

$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;

$k = $box[(($box[$a] + $box[$j]) % 256)];
$cipher .= chr(ord($data[$i]) ^ $k);
}

return $cipher;
}

$key = '5201314'; //原始KEY
$pwd = md5(md5($key).'我是常量'); //md5+常量
$data = '我愛北京天安門'; //要加密的數據
$cipher = rc4($pwd, $data); //AC4 加密演算法
$c = rc4($pwd, $cipher); //AC4 加密演算法還原 (還原只需要重新加密一次)
echo '<pre>';
var_mp($key);
var_mp($pwd);
var_mp($data);
var_mp($cipher);
var_mp($c);
?>

❾ 如何用rc4 加密演算法對excel vba進行加密

我就是專門做破解工作的,沒有說普通的加密很容易破解,你有密碼里加入大小寫,特殊符號以及空格,或者在加上幾個其它國家的語言文子(比如日文)10位以上,這樣就很難破解了,
如果這樣不行的話,你用最新版本的RAR(壓縮包加密)位數多一點,再加上大小寫,特殊符號以及空格或者在加上幾個其它國家的語言文字(比如日文)10位以上,目前基本無法破解,破解軟體對這種遠算只能達到一秒幾次。
namespace CryptoRC4
{
using System;
using System.Text;

public class clsRC4Engine
{
private static long m_nBoxLen = 255;

protected clsRC4Engine()
{

}
private static void GetKeyBytes( string Key, out byte[] m_nBox )
{
long index2 = 0;
m_nBox = new byte[m_nBoxLen];
Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode;
byte[] asciiBytes = Encoding.Convert(unicode,ascii, unicode.GetBytes( Key ));
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes,0,asciiBytes.Length)];

ascii.GetChars(asciiBytes,0,asciiBytes.Length,asciiChars,0);
long KeyLen = Key.Length;
for ( long count = 0; count < m_nBoxLen ; count ++ )
{
m_nBox[count] = (byte)count;
}
for ( long count = 0; count < m_nBoxLen ; count ++ )
{

index2 = (index2 + m_nBox[count] + asciiChars[ count % KeyLen ]) % m_nBoxLen;
byte temp = m_nBox[count];
m_nBox[count] = m_nBox[index2];
m_nBox[index2] = temp;
}
}

private static bool GetEncryptBytes( string sData, byte[] m_nBox,out byte[] EncryptedBytes )
{
EncryptedBytes = null;
bool toRet = true;
try
{
long i=0;
long j=0;
Encoding enc_default = Encoding.Unicode;
byte[] input = enc_default.GetBytes( sData );
EncryptedBytes = new byte[input.Length];
byte[] n_LocBox = new byte[m_nBoxLen];
m_nBox.CopyTo(n_LocBox,0);
long ChipherLen = input.Length + 1;
for ( long offset = 0; offset < input.Length ; offset++ )
{
i = ( i + 1 ) % m_nBoxLen;
j = ( j + n_LocBox[i] ) % m_nBoxLen;
byte temp = n_LocBox[i];
n_LocBox[i] = n_LocBox[j];
n_LocBox[j] = temp;
byte a = input[offset];
byte b = n_LocBox[(n_LocBox[i]+n_LocBox[j])% m_nBoxLen];
EncryptedBytes[offset] = (byte)((int)a^(int)b);
}
}
catch
{
EncryptedBytes = null;

toRet = false;
}
return toRet;
}

public static bool Encrypt( string sData, string Key, out string EncryptedString )
{
EncryptedString = null;

if( sData == null || Key == null ) return false;

byte[] m_nBox;

GetKeyBytes( Key, out m_nBox );

byte[] output;

if( GetEncryptBytes( sData, m_nBox, out output ) )

{

// Convert data to hex-data

EncryptedString = "";

for( int i = 0; i < output.Length; i++ )

EncryptedString += output[i].ToString( "X2" );

return true;

}

else

return false;
}

/// <summary>

/// Decrypt data using specific key

/// </summary>

/// <param name="EncryptedString"></param>

/// <param name="Key"></param>

/// <param name="sData"></param>

/// <returns></returns>

public static bool Decrypt( string EncryptedString, string Key, out string sData )

{

sData = null;

if( EncryptedString == null || Key == null ) return false;

else if( EncryptedString.Length % 2 != 0 ) return false;

byte[] m_nBox;

GetKeyBytes( Key, out m_nBox );

// Convert data from hex-data to string

byte[] bData = new byte[EncryptedString.Length / 2];

for( int i = 0; i < bData.Length; i++ )

bData[i] = Convert.ToByte( EncryptedString.Substring( i * 2, 2 ), 16 );

EncryptedString = Encoding.Unicode.GetString( bData );

byte[] output;

if( GetEncryptBytes( EncryptedString, m_nBox, out output ) )

{

sData = Encoding.Unicode.GetString( output );

return true;

}

else

return false;

}

}

}

調用:

//Encrypt data

string strEncryptedString;

if( clsRC4Engine.Encrypt( strValue, strKey, out strEncryptedString ) )

MessageBox.Show( strEncryptedString );

//Decrypt data

string strDecryptedString;

if( clsRC4Engine.Decrypt( strValue, strKey, out strDecryptedString ) )

MessageBox.Show( strDecryptedString );

另外一種
public static string encrypt_str( string str )
{
string s = "";
int i_Encrypt = ClsSetConst.m_Set_Encrypt;
char[] s_array = str.ToCharArray();
for(int i = 0; i < s_array.Length; i++)
{
int x = ((int)s_array[i]) + i_Encrypt;
s += (char)(x);
}
return s;
}
public void decript_str(string str)
{
string s = "";
int i_Encrypt = ClsSetConst.m_Set_Encrypt;
char[] s_array = str.ToCharArray();
for(int i = 0; i < s_array.Length; i++)
{
int x = ((int)s_array[i]) - i_Encrypt;
s += (char)x;
}
自己看看有沒有輸錯的地方吧

❿ wifi 的幾種加密方式

一種數據加密演算法,用於提供等同於有線區域網的保護能力。它的安全技術源自於名為RC4的RSA數據加密技術,是無線區域網WLAN的必要的安全防護層。目前常見的是64位WEP加密和128位WEP加密。WPA(WiFiProtectedAccess
,WiFi網路安全存取)。WPA協議是一種保護無線網路(WiFi)安全的系統,它是在前一代有線等效加密(WEP)的基礎上產生的,解決了前任WEP的缺陷問題,它使用TKIP(臨時密鑰完整性)協議,是IEEE
802.11i標准中的過渡方案
。其中WPA-PSK主要面向個人用戶。
WPA2,即WPA加密的升級版。它是WiFi聯盟驗證過的IEEE 802.11i標準的認證形式,WPA2實現了802.11i的強制性元素,特別是Michael演算法被公認徹底安全的CCMP(計數器模式密碼塊鏈消息完整碼協議)訊息認證碼所取代、而RC4加密演算法也被AES(高級加密)所取代。
WPA-PSK+WPA2-PSK。從字面便可以看出,很明顯,最後一種是兩種加密演算法的組合,可以說是強強聯手。WPA-PSK 也叫做 WPA-Personal(WPA個人)。WPA-PSK使用TKIP加密方法把無線設備和接入點聯系起來.WPA2-PSK使用AES加密方法把無線設備和接入點聯系起來。
1、聊勝於無的WEP
WEP作為一種老式的加密手段,它的特點是使用一個靜態的密鑰來加密所有的通信
,這就意味著,網管人員如果想更新密鑰,必須親自訪問每台主機,並且其所採用的RC4的RSA數據加密技術具有可預測性,對於入侵者來說很容易截取和破解加密密鑰,使用戶的安全防護形同虛設,因此如非迫不得已,不建議選擇此種安全模式。
2、升級後的WPA
繼WEP之後,人們將期望轉向了其升級後的WPA,與之前WEP的靜態密鑰不同,WPA需要不斷的轉換密鑰。WPA採用有效的密鑰分發機制,可以跨越不同廠商的無線網卡實現應用。它作為WEP的升級版,在安全的防護上比WEP更為周密,主要體現在身份認證、加密機制和數據包檢查等方面,而且它還提升了無線網路的管理能力。
3、追求,永無止境:WPA2
WPA2是WiFi聯盟驗證過的IEEE 802.11i標準的認證形式,WPA2實現了802.11i的強制性元素,特別是Michael演算法被公認徹底安全的CCMP(計數器模式密碼塊鏈消息完整碼協議)訊息認證碼所取代、而RC4加密演算法也被AES所取代。
目前WPA2加密方式的安全防護能力非常出色,只要用戶的無線網路設備均能夠支持WPA2加密,那麼恭喜你,你的無線網路處於一個非常安全的境地。

閱讀全文

與rc4加密演算法實現相關的資料

熱點內容
多店鋪阿里雲伺服器教程 瀏覽:378
單片機求初值 瀏覽:420
安卓機如何在電腦備份圖片 瀏覽:925
ca證書加密機價格 瀏覽:798
天乾地支年份演算法 瀏覽:796
程序員打造的視頻 瀏覽:7
java和php通信 瀏覽:680
為什麼黑程序員 瀏覽:163
程序員男生 瀏覽:456
戴爾文件夾內文件怎麼置頂 瀏覽:582
雲伺服器6m網速 瀏覽:722
vivo手機中國聯通伺服器地址 瀏覽:862
工程總控編譯失敗 瀏覽:707
燕趙紅楓app如何下載 瀏覽:867
php查殺軟體 瀏覽:878
教育管理學pdf 瀏覽:547
伺服器均衡怎麼使用 瀏覽:626
linux中jps 瀏覽:954
單片機實驗感想 瀏覽:561
程序員級別數學演算法邏輯 瀏覽:900