当前位置:首页 > 代码 > 正文

rc4加密代码c(rc4加密破解)

admin 发布:2022-12-19 23:48 130


本篇文章给大家谈谈rc4加密代码c,以及rc4加密破解对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

RC4的原理

RC4算法的原理很简单,包括初始化算法(KSA)和伪随机子密码生成算法(PRGA)两大部分。假设S-box的长度为256,密钥长度为Len。先来看看算法的初始化部分(用C代码表示):

其中,参数1是一个256长度的char型数组,定义为: unsigned char sBox[256];

参数2是密钥,其内容可以随便定义:char key[256];

参数3是密钥的长度,Len = strlen(key); /*初始化函数*/void rc4_init(unsigned char*s,unsigned char*key, unsigned long Len){    int i=0,j=0;    char k[256]={0};    unsigned char tmp=0;    for(i=0;i256;i++) {        s[i]=i;        k[i]=key[i%Len];    }    for(i=0;i256;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的长度. /*加解密*/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;kLen;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函数中,调用顺序如下: int main(){unsigned char s[256]={0},s2[256]={0};//S-boxchar key[256]={justfortest};char pData[512]=这是一个用来加密的数据Data;unsigned long len=strlen(pData);int i;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(i=0;i256;i++){    printf(%02X,s[i]);    if(i(i+1)%16==0)putchar('\n');}printf(\n\n);for(i=0;i256;i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!{    s2[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(s2,(unsigned char*)pData,len);//解密printf(pData=%s\n\n,pData);return0;}因此最终的完整程序是: //程序开始#includestdio.h#includestring.htypedef unsigned longULONG;/*初始化函数*/void rc4_init(unsigned char*s, unsigned char*key, unsigned long Len){    int i = 0, j = 0;    char k[256] = { 0 };    unsigned char tmp = 0;    for (i = 0; i256; i++)    {        s[i] = i;        k[i] = key[i%Len];    }    for (i = 0; i256; i++)    {        j = (j + s[i] + k[i]) % 256;        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; kLen; 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 }, s2[256] = { 0 };//S-box    char key[256] = { justfortest };    char pData[512] = 这是一个用来加密的数据Data;    unsigned long len = strlen(pData);    int i;    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 (i = 0; i256; i++)    {        printf(%02X, s[i]);        if (i  (i + 1) % 16 == 0)putchar('\n');    }    printf(\n\n);    for (i = 0; i256; i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!    {        s2[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,(unsignedchar*)key,strlen(key));//初始化密钥    rc4_crypt(s2, (unsigned char*)pData, len);//解密    printf(pData=%s\n\n, pData);    return 0;}//程序完

VC++ RC4,加密解密, 使用问题

#include "rc4.h"

void main()

{

char key[]="abcd";

RC4_KEY stKey;

BYTE d1[4]={0x11,0x22,0x33,0x44};

//加密

RC4Init(key,strlen(key),stKey);

RC4Works(d1,4,stKey);

//解密

RC4Init(key,strlen(key),stKey);

RC4Works(d1,4,stKey);

}

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;

}

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_dump($key);

var_dump($pwd);

var_dump($data);

var_dump($cipher);

var_dump($c);

?

关于rc4加密代码c和rc4加密破解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/30991.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载