C语言实现RC4序列密码
生活随笔
收集整理的這篇文章主要介紹了
C语言实现RC4序列密码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
RC4序列密碼
在密碼學中,RC4(來自Rivest Cipher 4的縮寫)是一種流加密算法,密鑰長度可變。它加解密使用相同的密鑰,因此也屬于對稱加密算法。
RC4密碼與基于移位寄存器的序列密碼不同,它是一種基于非線性數(shù)據(jù)表變換的序列密碼。它以一個足夠大的數(shù)據(jù)表為基礎(chǔ),對表進行非線性變換,產(chǎn)生非線性的密鑰序列。非線性變換的依據(jù)即輸入密鑰。
由于RC4密碼算法簡單,軟件實現(xiàn)容易,加密速度塊,因此得到了廣泛的應用。目前RC4可能是商用領(lǐng)域應用最廣的序列密碼。
代碼實現(xiàn)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>//s表的長度取256
#define size 256unsigned char sbox[257]={0};//初始化s表
void init_sbox(unsigned char*key){unsigned int i,j,k;int tmp;for(i=0;i<size;i++){sbox[i]=i;}j=k=0;for(i=0;i<size;i++){tmp=sbox[i];j=(j+tmp+key[k])%size;sbox[i]=sbox[j];sbox[j]=tmp;if(++k>=strlen((char*)key))k=0;}
}//加解密函數(shù)
void enc_dec(unsigned char*key,unsigned char*data){int i,j,k,R,tmp;init_sbox(key);j=k=0; for(i=0;i<strlen((char*)data);i++){j=(j+1)%size;k=(k+sbox[j])%size;tmp=sbox[j];sbox[j]=sbox[k];sbox[k]=tmp;R=sbox[(sbox[j]+sbox[k])%size];data[i]^=R;}
}int main(){unsigned char key[100]={0};unsigned char data[100]={0};printf("輸入你要加密的字符:");scanf("%100s",data);printf("輸入密鑰:");scanf("%40s",key);enc_dec(key,data);printf("enc: %s\n",data);enc_dec(key,data);printf("dec: %s\n",data);return 0;
}
代碼效果:
總結(jié)
以上是生活随笔為你收集整理的C语言实现RC4序列密码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言实现AES加解密
- 下一篇: C语言实现大数运算(长整数的加、减、乘、