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站长 原创,转载请注明出处和附带本文链接;
- 上一篇:打印当前页面代码(打印当前页面代码怎么设置)
- 下一篇:ctp代码(ctp 开发)
相关推荐
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
- 05-06在线html执行代码(html怎么运行)[20240506更新]
- 05-06源代码管理资源管理器(资源管理器运行代码)[20240506更新]
- 05-06代码源软件库(程序代码库)[20240506更新]
- 05-06点击弹出密码代码(点击弹出密码代码错误)[20240506更新]
- 05-06滚动导航代码(导航页面代码)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接