- 浏览: 466375 次
- 性别:
- 来自: 广州
最新评论
-
lhgyy00:
很好,回去好好研究下,3Q
博客资源与博客工具大全 -
ljl.java:
♦
你会遇到几段恋情?很准的哦~ -
ljl.java:
♦
你会遇到几段恋情?很准的哦~ -
jzzwy:
你这个red5是什么版本 Iterator<IConne ...
red5获取在线用户列表 -
81365341:
看着标题“red5配置详解”点进来的,结果没看到一句和配置有关 ...
red5配置详解
rc4.h
#ifndef _RC4_H
#define _RC4_H
struct rc4_state
{
int x, y, m[256];
};
void rc4_setup( struct rc4_state *s, unsigned char *key, int length );
void rc4_crypt( struct rc4_state *s, unsigned char *data, int length );
#endif /* rc4.h */
rc4.c
/*
* An implementation of the ARC4 algorithm
*
* Copyright (C) 2001-2003 Christophe Devine
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "rc4.h"
void rc4_setup( struct rc4_state *s, unsigned char *key, int length )
{
int i, j, k, *m, a;
s->x = 0;
s->y = 0;
m = s->m;
for( i = 0; i < 256; i++ )
{
m[i] = i;
}
j = k = 0;
for( i = 0; i < 256; i++ )
{
a = m[i];
j = (unsigned char) ( j + a + key[k] );
m[i] = m[j]; m[j] = a;
if( ++k >= length ) k = 0;
}
}
void rc4_crypt( struct rc4_state *s, unsigned char *data, int length )
{
int i, x, y, *m, a, b;
x = s->x;
y = s->y;
m = s->m;
for( i = 0; i < length; i++ )
{
x = (unsigned char) ( x + 1 ); a = m[x];
y = (unsigned char) ( y + a );
m[x] = b = m[y];
m[y] = a;
data[i] ^= m[(unsigned char) ( a + b )];
}
s->x = x;
s->y = y;
}
#ifdef TEST
#include <string.h>
#include <stdio.h>
/*
* ARC4 tests vectors from OpenSSL (crypto/rc4/rc4test.c)
*/
static unsigned char keys[7][30]={
{8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
{8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
{8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{4,0xef,0x01,0x23,0x45},
{8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
{4,0xef,0x01,0x23,0x45},
};
static unsigned char data_len[7]={8,8,8,20,28,10};
static unsigned char data[7][30]={
{0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xff},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xff},
{0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0,
0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0,
0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0,
0x12,0x34,0x56,0x78,0xff},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
{0},
};
static unsigned char output[7][30]={
{0x75,0xb7,0x87,0x80,0x99,0xe0,0xc5,0x96,0x00},
{0x74,0x94,0xc2,0xe7,0x10,0x4b,0x08,0x79,0x00},
{0xde,0x18,0x89,0x41,0xa3,0x37,0x5d,0x3a,0x00},
{0xd6,0xa1,0x41,0xa7,0xec,0x3c,0x38,0xdf,
0xbd,0x61,0x5a,0x11,0x62,0xe1,0xc7,0xba,
0x36,0xb6,0x78,0x58,0x00},
{0x66,0xa0,0x94,0x9f,0x8a,0xf7,0xd6,0x89,
0x1f,0x7f,0x83,0x2b,0xa8,0x33,0xc0,0x0c,
0x89,0x2e,0xbe,0x30,0x14,0x3c,0xe2,0x87,
0x40,0x01,0x1e,0xcf,0x00},
{0xd6,0xa1,0x41,0xa7,0xec,0x3c,0x38,0xdf,0xbd,0x61,0x00},
{0},
};
int main( void )
{
int i;
struct rc4_state s;
unsigned char buffer[30];
printf( "\n RC4 Validation Tests:\n\n" );
for( i = 0; i < 6; i++ )
{
printf( " Test %d ", i + 1 );
memcpy( buffer, data[i], data_len[i] );
rc4_setup( &s, &keys[i][1], keys[i][0] );
rc4_crypt( &s, buffer, data_len[i] );
if( memcmp( buffer, output[i], data_len[i] ) )
{
printf( "failed!\n" );
return( 1 );
}
printf( "passed.\n" );
}
printf( "\n" );
return( 0 );
}
#endif
===============================================================================
刚才浪费了好长的时间研究RC4加密算法。
关于RC4加密算法,可以参考百度百科:RC4算法
参考RC4经典加密算法代码(VB版),写了个VBS版。
下面附有代码,我觉得应该没有错误。
但测试后却发现:
1, key不能使用中文
2, 不同编码的中文加密以后的值也是不同的
3, 加密以后太多的不可见字符,根本不适合web使用。
4, 也许变通一下会是一个不错的加密算法。比如我下面的直接输出asc码。
Function RC4(inp,key)
' //RC4加密算法的VBS版
' //by fisker
Dim S(255), K(255), i
Dim j, temp, Y, t, x
Dim Outp
For i = 0 To 255
S(i) = i
Next
j = 1
For i = 0 To 255
If j > Len(key) Then j = 1
K(i) = Asc(mid(key, j, 1))
j = j + 1
Next
j = 0
For i = 0 To 255
j = (j + S(i) + K(i)) Mod 256
temp = S(i)
S(i) = S(j)
S(j) = temp
Next
i = 0
j = 0
For x = 1 To Len(inp)
i = (i + 1) Mod 256
j = (j + S(i)) Mod 256
temp = S(i)
S(i) = S(j)
S(j) = temp
t = (S(i) + (S(j) Mod 256)) Mod 256
Y = S(t)
'Outp = Outp & (Asc(mid(inp, x, 1)) Xor Y)
Outp = Outp & Chr(Asc(mid(inp, x, 1)) Xor Y) 'RC4算法
next
RC4 = Outp
End Function
#ifndef _RC4_H
#define _RC4_H
struct rc4_state
{
int x, y, m[256];
};
void rc4_setup( struct rc4_state *s, unsigned char *key, int length );
void rc4_crypt( struct rc4_state *s, unsigned char *data, int length );
#endif /* rc4.h */
rc4.c
/*
* An implementation of the ARC4 algorithm
*
* Copyright (C) 2001-2003 Christophe Devine
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "rc4.h"
void rc4_setup( struct rc4_state *s, unsigned char *key, int length )
{
int i, j, k, *m, a;
s->x = 0;
s->y = 0;
m = s->m;
for( i = 0; i < 256; i++ )
{
m[i] = i;
}
j = k = 0;
for( i = 0; i < 256; i++ )
{
a = m[i];
j = (unsigned char) ( j + a + key[k] );
m[i] = m[j]; m[j] = a;
if( ++k >= length ) k = 0;
}
}
void rc4_crypt( struct rc4_state *s, unsigned char *data, int length )
{
int i, x, y, *m, a, b;
x = s->x;
y = s->y;
m = s->m;
for( i = 0; i < length; i++ )
{
x = (unsigned char) ( x + 1 ); a = m[x];
y = (unsigned char) ( y + a );
m[x] = b = m[y];
m[y] = a;
data[i] ^= m[(unsigned char) ( a + b )];
}
s->x = x;
s->y = y;
}
#ifdef TEST
#include <string.h>
#include <stdio.h>
/*
* ARC4 tests vectors from OpenSSL (crypto/rc4/rc4test.c)
*/
static unsigned char keys[7][30]={
{8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
{8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
{8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{4,0xef,0x01,0x23,0x45},
{8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
{4,0xef,0x01,0x23,0x45},
};
static unsigned char data_len[7]={8,8,8,20,28,10};
static unsigned char data[7][30]={
{0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xff},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xff},
{0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0,
0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0,
0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0,
0x12,0x34,0x56,0x78,0xff},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
{0},
};
static unsigned char output[7][30]={
{0x75,0xb7,0x87,0x80,0x99,0xe0,0xc5,0x96,0x00},
{0x74,0x94,0xc2,0xe7,0x10,0x4b,0x08,0x79,0x00},
{0xde,0x18,0x89,0x41,0xa3,0x37,0x5d,0x3a,0x00},
{0xd6,0xa1,0x41,0xa7,0xec,0x3c,0x38,0xdf,
0xbd,0x61,0x5a,0x11,0x62,0xe1,0xc7,0xba,
0x36,0xb6,0x78,0x58,0x00},
{0x66,0xa0,0x94,0x9f,0x8a,0xf7,0xd6,0x89,
0x1f,0x7f,0x83,0x2b,0xa8,0x33,0xc0,0x0c,
0x89,0x2e,0xbe,0x30,0x14,0x3c,0xe2,0x87,
0x40,0x01,0x1e,0xcf,0x00},
{0xd6,0xa1,0x41,0xa7,0xec,0x3c,0x38,0xdf,0xbd,0x61,0x00},
{0},
};
int main( void )
{
int i;
struct rc4_state s;
unsigned char buffer[30];
printf( "\n RC4 Validation Tests:\n\n" );
for( i = 0; i < 6; i++ )
{
printf( " Test %d ", i + 1 );
memcpy( buffer, data[i], data_len[i] );
rc4_setup( &s, &keys[i][1], keys[i][0] );
rc4_crypt( &s, buffer, data_len[i] );
if( memcmp( buffer, output[i], data_len[i] ) )
{
printf( "failed!\n" );
return( 1 );
}
printf( "passed.\n" );
}
printf( "\n" );
return( 0 );
}
#endif
===============================================================================
刚才浪费了好长的时间研究RC4加密算法。
关于RC4加密算法,可以参考百度百科:RC4算法
参考RC4经典加密算法代码(VB版),写了个VBS版。
下面附有代码,我觉得应该没有错误。
但测试后却发现:
1, key不能使用中文
2, 不同编码的中文加密以后的值也是不同的
3, 加密以后太多的不可见字符,根本不适合web使用。
4, 也许变通一下会是一个不错的加密算法。比如我下面的直接输出asc码。
Function RC4(inp,key)
' //RC4加密算法的VBS版
' //by fisker
Dim S(255), K(255), i
Dim j, temp, Y, t, x
Dim Outp
For i = 0 To 255
S(i) = i
Next
j = 1
For i = 0 To 255
If j > Len(key) Then j = 1
K(i) = Asc(mid(key, j, 1))
j = j + 1
Next
j = 0
For i = 0 To 255
j = (j + S(i) + K(i)) Mod 256
temp = S(i)
S(i) = S(j)
S(j) = temp
Next
i = 0
j = 0
For x = 1 To Len(inp)
i = (i + 1) Mod 256
j = (j + S(i)) Mod 256
temp = S(i)
S(i) = S(j)
S(j) = temp
t = (S(i) + (S(j) Mod 256)) Mod 256
Y = S(t)
'Outp = Outp & (Asc(mid(inp, x, 1)) Xor Y)
Outp = Outp & Chr(Asc(mid(inp, x, 1)) Xor Y) 'RC4算法
next
RC4 = Outp
End Function
发表评论
-
TEA算法的VB实现代码的使用说明
2008-12-30 11:28 1948自从公开了TEA算法的VB代码之后一直有人追问我如何调用这两个 ... -
TEA算法的VB实现代码
2008-12-30 11:02 1657前些日子不少人都要挂QQ,有客户需求就自然有人去研究,所以不少 ... -
QQ通讯协议
2008-12-30 10:56 4208协议说明: 协议由报文 ... -
hoxede的QQ填充算法和TEA 加解密的python实现
2008-12-30 10:31 2919""" The MIT Lic ... -
如何从 Visual Basic 中调用 GetNetworkParams / GetAdapter
2008-12-30 09:52 17331. 启动一个新的 Visual Basic 标准 EX ... -
VB调用GetAdaptersInfo 的正确方法
2008-12-30 09:51 2746网上的教程没有一个能在多网卡或多IP下用的,总是在 Cop ... -
VB做的EXE文件设参数
2008-12-29 12:26 1227这个其实很简单 在 Private Sub Form_L ... -
VB常用字符串函数
2008-12-29 12:26 15021. ASC(X),Chr(X):转换字 ... -
VB常用函数
2008-12-29 12:25 23301. Time 返回系统时钟的当前时间。 Date 返回 ... -
VB使用*.res资源文件
2008-12-29 12:23 1695你一定也常常因苦于无法组织自己程序中大量的picture,而头 ... -
在不同的模式下实现定时关闭计算机
2008-12-29 12:20 888Option Explicit Const SM_CLEANB ... -
强制关闭指定QQ号
2008-12-29 12:19 1345'添加 Text1 Command1 ... -
VB读取武林外传内存地址
2008-12-29 12:18 2122一 模块代码 复制内容到剪贴板 代码: Option Expl ... -
怎么编程把用户名,密码提交到网页上的登录页?
2008-12-29 12:06 1477首先在程序中加入Webbrowser控件并加入引用 Micro ... -
在XP/2K 任务管理器的进程列表中隐藏当前进程
2008-12-29 12:05 1273新建一个模块,把以下代码复制进去,然后在load中调用即可实现 ... -
用VB制作IE工具条自定义按钮
2008-12-29 12:04 1215Private Sub UserControl_Resize( ... -
Webbrowser(Internet 控件)属性方法事件一览表
2008-12-29 11:56 4828想找个Webbrowser控件的详细使用手册,网上找了好久,都 ... -
使用vbs下载文件
2008-12-29 11:52 1573使用vbs下载文件 iLocal=LCase(Wscript. ... -
如何用VB制作半透明窗体?
2008-12-29 11:51 1720函数SetLayeredWindowAttributes ... -
vb api 控制 任务栏 桌面 托盘。。
2008-12-29 11:45 2114VB无疑是最先进的编程 ...
相关推荐
RC4是一种广泛使用的流式加密算法,由Ron Rivest在1987年设计,主要...以上是对"C# RC4加密,源代码,实用"这个主题的详细解释,如果你正在学习或使用RC4加密,理解这些概念和步骤将有助于你更好地掌握该算法的实现。
标题 "Delphi 的rc4加密单元函数库" 涉及到的是在Delphi编程环境中使用RC4加密算法的一个自定义实现。RC4(Rivest Cipher 4)是一种流密码算法,由Ron Rivest在1987年设计,由于其简单性和效率,它在许多应用程序中...
`rc4.sdf`可能是Visual Studio的工作数据库文件,它不包含源代码,但可能记录了项目的一些元数据。 在实际应用中,RC4由于其安全性问题已被弃用,因为存在诸如“ARC4”等已知的攻击方式。现代加密标准如AES(高级...
学习和分析RC4源代码有助于理解其工作原理,同时也能帮助开发者掌握如何在实际项目中应用这种加密算法。不过,需要注意的是,由于RC4的安全性在近年来受到了质疑,存在一些已知的攻击方式,如弱密钥问题和 biases...
"content.txt"可能是源码文件中包含的示例或说明,你可以打开这个文件来查看具体的易语言源代码实现。 总之,RC4算法在易语言中的应用主要涉及到理解其内部的工作原理,并能用易语言的语法来实现KSA和PRNG过程。...
### 实验3 C语言实现RC4加密算法报告 #### 实验背景及目标 本实验旨在通过C语言实现RC4加密算法来对任意文件进行加密和解密操作。实验任务要求能够通过命令行的方式进行文件的加解密工作,并且能够处理包括但不...
根据给定的文件信息,我们可以深入探讨RC加密解密算法及其在C语言中的实现细节,以下将详细解析RC4算法的原理、特点以及C源代码的实现方式。 ### RC4算法简介 RC4(Rivest Cipher 4)是由Ron Rivest在1987年设计的...
在提供的文件"RC4_1"中,很可能是包含了一个RC4加密的源代码实现,这可能是用C、C++或Java等编程语言编写的。源代码通常会包含KSA和PRGA的实现,以及如何使用密钥和初始化向量来初始化算法并生成加密流。通过分析这...
文件名“rc4”可能是指源代码文件,包含了实现RC4算法的C语言代码。为了提高代码质量,应该遵循良好的编程规范,包括适当的注释、错误处理、内存管理以及性能优化。 总的来说,C语言实现的RC4加密算法提供了对文件...
在提供的压缩包文件"RC4加密通信的实现"中,可能包含的文件有源代码文件(如.c或.java)、编译后的二进制文件、测试数据和相关的文档说明。通过阅读这些文件,可以更深入地了解RC4如何被集成到局域网通信的环境中,...
压缩包中的单个文件"rc4"可能是实现RC4算法的源代码文件,可能包含了上述的全部功能。为了深入理解RC4,你可以下载这个文件并逐行阅读,理解每一步操作的目的和意义。同时,也可以尝试用不同的输入数据和密钥运行...
在文件名列表中,只有一个名为"RC4"的文件,这可能是整个源代码的主文件或者包含了所有RC4相关功能的头文件。通常,这个文件会包含RC4算法的实现,包括前面提到的KSA和PRGA的函数,以及可能的测试或示例代码,用于...
本压缩包包含的RC4加密解密程序是作者根据RC4算法原理自行编写的,涵盖C、Python、Java、Pascal、Basic、Perl、Ruby、JSP和PHP九种编程语言的源代码,适用于不同编程背景的开发者进行学习和实践。 1. **RC4加密算法...
RC4是一种广泛使用的流式加密算法,由Ron Rivest在1987年设计,由于其简单高效的特点,被应用于很多领域,包括网络传输、软件保护等。在易语言和E4A(Easy4Android)这样的编程环境中,RC4算法也被用于实现数据的...
在提供的压缩包中,"RC4"很可能是实现RC4算法的源代码文件,而"www.pudn.com.txt"可能是关于该代码的说明、版权信息或者示例用法的文本文件。如果你打算使用这个RC4实现,你需要仔细阅读代码和相关文档,理解其工作...
在"rc4-master"这个文件夹中,可能包含了RC4算法的C语言实现源代码,包括头文件(可能为rc4.h)和实现文件(如rc4.c)。通过阅读和理解这些源代码,你可以看到上述步骤是如何被具体编程实现的,同时也可以学习如何在...
RC4是一种广泛使用的流式加密算法,由Ron Rivest在1987年设计...通过阅读源代码,我们可以更深入地理解RC4的工作原理和C语言编程技巧。然而,由于RC4的局限性和安全性问题,它现在更多地作为教学示例而非实际加密用途。
4. **加密算法**:RC522支持MFRC522安全芯片内的各种加密算法,如DES、3DES和AES等,确保了数据传输的安全性。 5. **命令集**:模块提供了丰富的命令集,包括初始化、防冲突、读写卡、卡片选择等功能,方便开发者...
"c++加密算法源代码大全"是一个珍贵的资源集合,包含了300多种不同的C++实现的加密和解密算法,为开发者提供了广泛的选择和学习机会。 1. **基础加密算法**:这些算法通常是加密技术的基石,如Caesar密码、Vigenere...
`rc4.c`文件很可能是实现这些功能的源代码,它应该包含了RC4的初始化、加密和解密过程的实现。`license.txt`文件可能包含了代码的授权许可信息,这在开源项目中是常见的,以规定他人如何使用和分发代码。 在实际...