导航:首页 > 源码编译 > 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加密算法实现相关的资料

热点内容
单片机求初值 浏览: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
2k21公园怎么换服务器 浏览:724