导航:首页 > 源码编译 > rc4加密算法

rc4加密算法

发布时间:2022-01-30 13:47:08

加密算法:AES DES RC4 Rabbit TripleDes 那个更好它们分

DES不够安全。AES, TripleDes, RC4都可以。 Rabbit没听说过。
除了Rabbit,其他都是单钥体制的加密算法。就是用来加密而已。

一般的加密系统应该包括密钥产生,分配和管理的一个系统,分配的时候还会用到公钥体制用来加密密钥和传输密钥并用来签名。经常用的公钥算法是RSA。密钥是有时间限制的。用了时间太长了就得重新换一个避免被破解掉。

㈡ 求一个实现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的原理

RC4算法的原理很简单,包括初始化算法(KSA)和伪随机子密码生成算法(PRGA)两大部分。假设S-box的长度为256,密钥长度为Len。先来看看算法的初始化部分(用C代码表示):
其中,参数1是一个256长度的char型数组,定义为: unsigned char sBox[256];
参数2是密钥,其内容可以随便定义:char key[256];
参数3是密钥的长度,Len = strlen(key); /*初始化函数*/voidrc4_init(unsignedchar*s,unsignedchar*key,unsignedlongLen){inti=0,j=0;chark[256]={0};unsignedchartmp=0;for(i=0;i<256;i++){s[i]=i;k[i]=key[i%Len];}for(i=0;i<256;i++){j=(j+s[i]+k[i])%256;tmp=s[i];s[i]=s[j];//交换s[i]和s[j]s[j]=tmp;}}在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,将S-box和明文进行xor运算,得到密文,解密过程也完全相同。
再来看看算法的加密部分(用C代码表示):
其中,参数1是上边rc4_init函数中,被搅乱的S-box;
参数2是需要加密的数据data;
参数3是data的长度. /*加解密*/voidrc4_crypt(unsignedchar*s,unsignedchar*Data,unsignedlongLen){inti=0,j=0,t=0;unsignedlongk=0;unsignedchartmp;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];}}最后,在main函数中,调用顺序如下: intmain(){unsignedchars[256]={0},s2[256]={0};//S-boxcharkey[256]={justfortest};charpData[512]=这是一个用来加密的数据Data;unsignedlonglen=strlen(pData);inti;printf(pData=%s ,pData);printf(key=%s,length=%d ,key,strlen(key));rc4_init(s,(unsignedchar*)key,strlen(key));//已经完成了初始化printf(完成对S[i]的初始化,如下: );for(i=0;i<256;i++){printf(%02X,s[i]);if(i&&(i+1)%16==0)putchar(' ');}printf( );for(i=0;i<256;i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!{s2[i]=s[i];}printf(已经初始化,现在加密: );rc4_crypt(s,(unsignedchar*)pData,len);//加密printf(pData=%s ,pData);printf(已经加密,现在解密: );//rc4_init(s,(unsignedchar*)key,strlen(key));//初始化密钥rc4_crypt(s2,(unsignedchar*)pData,len);//解密printf(pData=%s ,pData);return0;}因此最终的完整程序是: //程序开始#include<stdio.h>#include<string.h>typedefunsignedlongULONG;/*初始化函数*/voidrc4_init(unsignedchar*s,unsignedchar*key,unsignedlongLen){inti=0,j=0;chark[256]={0};unsignedchartmp=0;for(i=0;i<256;i++){s[i]=i;k[i]=key[i%Len];}for(i=0;i<256;i++){j=(j+s[i]+k[i])%256;tmp=s[i];s[i]=s[j];//交换s[i]和s[j]s[j]=tmp;}}/*加解密*/voidrc4_crypt(unsignedchar*s,unsignedchar*Data,unsignedlongLen){inti=0,j=0,t=0;unsignedlongk=0;unsignedchartmp;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];}}intmain(){unsignedchars[256]={0},s2[256]={0};//S-boxcharkey[256]={justfortest};charpData[512]=这是一个用来加密的数据Data;unsignedlonglen=strlen(pData);inti;printf(pData=%s ,pData);printf(key=%s,length=%d ,key,strlen(key));rc4_init(s,(unsignedchar*)key,strlen(key));//已经完成了初始化printf(完成对S[i]的初始化,如下: );for(i=0;i<256;i++){printf(%02X,s[i]);if(i&&(i+1)%16==0)putchar(' ');}printf( );for(i=0;i<256;i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!{s2[i]=s[i];}printf(已经初始化,现在加密: );rc4_crypt(s,(unsignedchar*)pData,len);//加密printf(pData=%s ,pData);printf(已经加密,现在解密: );//rc4_init(s,(unsignedchar*)key,strlen(key));//初始化密钥rc4_crypt(s2,(unsignedchar*)pData,len);//解密printf(pData=%s ,pData);return0;}//程序完

㈣ RC4算法的详细介绍

RC4加密算法
之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右。
RC4算法的原理很简单,包括初始化算法和伪随机子密码生成算法两大部分。假设S-box长度和密钥长度均为n。先来看看算法的初始化部分(用类C伪代码表示):
for (i=0; i<n; i++){
s[i]=i;
}
j=0;
for (i=0; i<n; i++)
{
j=(j+s[i]+k[i])%n;
swap(s[i], s[j]);
}
在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,并且,该序列是随机的:
i=j=0;
while (明文未结束)
{
++i%=n;
j=(j+s)%n;
swap(s, s[j]);
sub_k=s((s+s[j])%n);
}
得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。
由于RC4算法加密是采用的xor,所以,一旦子密钥序列出现了重复,密文就有可能被破解。关于如何破解xor加密,请参看Bruce Schneier的Applied Cryptography一书的1.4节Simple XOR,在此我就不细说了。那么,RC4算法生成的子密钥序列是否会出现重复呢?经过我的测试,存在部分弱密钥,使得子密钥序列在不到100万字节内就发生了完全的重复,如果是部分重复,则可能在不到10万字节内就能发生重复,因此,推荐在使用RC4算法时,必须对加密密钥进行测试,判断其是否为弱密钥。
但在2001年就有以色列科学家指出RC4加密算法存在着漏洞,这可能对无线通信网络的安全构成威胁。
以色列魏茨曼研究所和美国思科公司的研究者发现,在使用“有线等效保密规则”(WEP)的无线网络中,在特定情况下,人们可以逆转RC4算法的加密过程,获取密钥,从而将已加密的信息解密。实现这一过程并不复杂,只需要使用一台个人电脑对加密的数据进行分析,经过几个小时的时间就可以破译出信息的全部内容。
专家说,这并不表示所有使用RC4算法的软件都容易泄密,但它意味着RC4算法并不像人们原先认为的那样安全。这一发现可能促使人们重新设计无线通信网络,并且使用新的加密算法。

㈤ 如何用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;
}
自己看看有没有输错的地方吧

㈥ 怎么在服务器端禁止使用rc4加密算法

.版本 2.子程序 加密为rc4, 文本型, 公开, 用RC4算法对文本进行加密.参数 加密的数据, 文本型, , 欲加密的文本.参数 加密密钥, 文本型, 可空, 用作加密的密码.局部变量 临时, 字节集.局部变量 s, 字节型, , "256".局部变量 k, 字节型, , "256"....

㈦ ssl安全 怎么禁用RC4加密算法

SCHANNEL\Protocols 子项
协议 的注册表项下 SCHANNEL
键用于的控件使用的协议支持由 Schannel.dll 文件,并限制该协议使用 TLS 服务器或 TLS 的客户端。

若要禁止使用的 SSL
3.0 或 TLS 1.0 之外的其他协议,请将 Enabled 值的 DWORD 鍊兼暟鎹改为 0x0 中下面的注册表项,在 协议 键下的每个:

目前的 Microsoft 消息队列使用的客户端和服务器之间只有 PCT 1.0

SCHANNEL\Ciphers 子项

密码 的注册表项下 SCHANNEL 键用于控制如 DES 或 RC4
对称算法的使用。 以下是在 密码 键下的有效注册表项。

SCHANNEL\Ciphers\RC4
128/128 子项:

rc4 128/128

此子项是指 128 位 RC4。

要允许此密码算法、 0xffffffff 到更改
启用 值的 DWORD 值数据,否则更改为 0x0 的 DWORD
值数据。 如果不配置 启用 值,启用了默认值。 此注册表项不能应用于不具备 SGC
证书

---------------------------------------------------------------------------------------

des:有好几种:0xffffffff 到更改 启用,否则更改为 0x0 ,不配置 启用
值,启用了默认值,但有很多不允许禁用的算法。。。

TLS 1.0 和SSL 3.0
:{}是要在regedit里建的值:

ssl_rsa_export_with_rc4_40_md5
{0x00,0x03}

ssl_rsa_with_rc4_128_md5
{0x00,0x04}

SSL_RSA_WITH_DES_CBC_SHA
{0x00,0x09}

ssl_rsa_with_3des_ede_cbc_sha
{0x00,0x0A}

ssl_rsa_export1024_with_des_cbc_sha
{0x00,0x62}

ssl_rsa_export1024_with_rc4_56_sha
{0x00,0x64}

TLS_RSA_WITH_DES_CBC_SHA
{0x00,0x09}

tls_rsa_with_3des_ede_cbc_sha
{0x00,0x0A}

tls_rsa_export1024_with_des_cbc_sha
{0x00,0x62
tls_rsa_export_with_rc4_40_md5

{0x00,0x03}

tls_rsa_with_rc4_128_md5
{0x00,0x04}

1

。。。。SCHANNEL\Ciphers\Triple
DES 128/128 子项:

三重 DES 168/168

2

。。。。SCHANNEL\Ciphers\RC2 56/56
子项:

DES 56/56

3

SCHANNEL\Hashes\MD5
子项:

md5

=====
例子:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\MD5]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\SHA]
"Enabled"=dword:ffffffff

SCHANNEL\Protocols\PCT 1.0\Client

SCHANNEL\Protocols\PCT 1.0\Server

SCHANNEL\Protocols\SSL 2.0\Client

SCHANNEL\Protocols\SSL 2.0\Server

㈧ RC4 与 DES 哪个算法最安全

随机密钥加密算法:RC4
位密码算法:DES 三重DES(Triple-DES)仍然是很安全的,但是也只是在别无他法的情况下的一个较好的选择。显然高级加密标准(AES)是一个更好的加密算法,NIST用AES代替Triple-DES作为他们的标准(下面有更详细的讨论)。其他较好的算法包括另外两个AES的变种算法Twofish和Serpent-也称为CAST-128,它是效率和安全的完美结合。这几个算法不仅比DES更安全,而且也比DES的速度更快。为什么要使用一些又慢又不安全的算法呢?SHA1是一个哈希函数,而不是一个加密函数。作为一个哈希函数,SHA1还是相当优秀的,但是还需要几年的发展才能用作加密算法。如果你正在设计一个新系统,那么谨记你可能会在若干年后用SHA1代替目前的算法。我再重复一遍:只是可能。呵呵,希望能帮到你!谢谢望采纳哦!

㈨ 什么是RC4、RC5、AES

http://ke..com/view/2310288.htm

aes加密算法
AES加密算法原理
随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES[1]。经过三轮的筛选,比利时Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。尽管人们对AES还有不同的看法,但总体来说,AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES设计有三个密钥长度:128,192,256位,相对而言,AES的128密钥比DES的56密钥强1021倍[2]。AES算法主要包括三个方面:轮变化、圈数和密钥扩展。本文以128为例,介绍算法的基本原理;结合AVR汇编语言,实现高级数据加密算法AES。
AES是分组密钥,算法输入128位数据,密钥长度也是128位。用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列)。每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与。由于外部输入的加密密钥K长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥K扩展成更长的比特串,以生成各轮的加密和解密密钥。
1.1圈变化
AES每一个圈变换由以下三个层组成:
非线性层——进行Subbyte变换;
线行混合层——进行ShiftRow和MixColumn运算;
密钥加层——进行AddRoundKey运算。
① Subbyte变换是作用在状态中每个字节上的一种非线性字节转换,可以通过计算出来的S盒进行映射。
② ShiftRow是一个字节换位。它将状态中的行按照不同的偏移量进行循环移位,而这个偏移量也是根据Nb的不同而选择的[3]。
③ 在MixColumn变换中,把状态中的每一列看作GF(28)上的多项式a(x)与固定多项式c(x)相乘的结果。 b(x)=c(x)*a(x)的系数这样计算:*运算不是普通的乘法运算,而是特殊的运算,即 b(x)=c(x)·a(x)(mod x4+1) 对于这个运算 b0=02。a0+03。a1+a2+a3 令xtime(a0)=02。a0其中,符号“。”表示模一个八次不可约多项式的同余乘法[3]。
对于逆变化,其矩阵C要改变成相应的D,即b(x)=d(x)*a(x)。
④ 密钥加层运算(addround)是将圈密钥状态中的对应字节按位“异或”。
⑤ 根据线性变化的性质[1],解密运算是加密变化的逆变化。这里不再详细叙述。
1.2轮变化
对不同的分组长度,其对应的轮变化次数是不同的,如表1所列。
1.3密钥扩展
AES算法利用外部输入密钥K(密钥串的字数为Nk),通过密钥的扩展程序得到共计4(Nr+1)字的扩展密钥。它涉及如下三个模块:① 位置变换(rotword)——把一个4字节的序列[A,B,C,D]变化成[B,C,D,A];② S盒变换(subword)——对一个4字节进行S盒代替;③ 变换Rcon——Rcon表示32位比特字[xi-1,00,00,00]。这里的x是(02),如 Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]…… 扩展密钥的生成:扩展密钥的前Nk个字就是外部密钥K;以后的字W[]等于它前一个字W[[i-1]]与前第Nk个字W[[i-Nk]]的“异或”,即W[]=W[[i-1]]W[[i- Nk]]。但是若i为Nk的倍数,则W=W[i-Nk]Subword(Rotword(W[[i-1]]))Rcon[i/Nk]。
AES的加密与解密流程如图1所示。

阅读全文

与rc4加密算法相关的资料

热点内容
工作三年的大专程序员 浏览:728
java毕业设计文献 浏览:143
筹码集中度指标源码 浏览:482
listsortjava 浏览:186
plc闪光电路编程实例 浏览:299
socket编程试题 浏览:206
华为的服务器怎么设置从光驱启动 浏览:871
程序员真的累吗 浏览:328
学信网app为什么刷脸不了 浏览:874
天蝎vs程序员 浏览:996
单片机下载口叫什么 浏览:190
程序员的道 浏览:926
云服务器不实名违法吗 浏览:558
怎样查看文件夹图片是否重复 浏览:995
文件怎么导成pdf文件 浏览:808
打开sql表的命令 浏览:103
安卓手机如何面部支付 浏览:38
天元数学app为什么登录不上去 浏览:825
明日之后为什么有些服务器是四个字 浏览:104
安卓系统l1是什么意思 浏览:26