key为密钥~
#include<iostream>
#include<string>
using namespace std;
int s[256];
int t[256];
string key="0123456789";
void swap(int* s1,int* s2){
int temp=*s1;
*s1=*s2;
*s2=temp;
}
void init(){
//初始化s和t数组
for(int i=0;i<256;i++){
s[i]=i;
t[i]=atoi(&(const char)(key.at(i%key.length())));
}
int j=0;
for(int i=0;i<256;i++){
j=(j+s[j]+t[j])%256;
swap(s+i,s+j);
}
}
void encode(int* start,int length){
int pos=0;
int i=0,j=0;
while(pos++<length){
i=(i+1)%256;
j=(j+s[i])%256;
swap(s+i,s+j);
int temp=(s[i]+s[j])%256;
int k=s[temp];
*start^=k;
start++;
}
}
void decode(int* start,int length){
encode(start,length);
}
void print(int* a,int length,string startMessage=""){
cout<<startMessage<<" ";
for(int i=0;i<length;i++){
cout<<*(a+i)<<" ";
}
cout<<endl;
}
int main(){
init();
int a[10]={0,1,2,3,4,5,6,7,8,9};
print(a,10,"原数组");
encode(a,10);
print(a,10,"加密后");
init();
decode(a,10);
print(a,10,"解密后");
}
#include<string>
using namespace std;
int s[256];
int t[256];
string key="0123456789";
void swap(int* s1,int* s2){
int temp=*s1;
*s1=*s2;
*s2=temp;
}
void init(){
//初始化s和t数组
for(int i=0;i<256;i++){
s[i]=i;
t[i]=atoi(&(const char)(key.at(i%key.length())));
}
int j=0;
for(int i=0;i<256;i++){
j=(j+s[j]+t[j])%256;
swap(s+i,s+j);
}
}
void encode(int* start,int length){
int pos=0;
int i=0,j=0;
while(pos++<length){
i=(i+1)%256;
j=(j+s[i])%256;
swap(s+i,s+j);
int temp=(s[i]+s[j])%256;
int k=s[temp];
*start^=k;
start++;
}
}
void decode(int* start,int length){
encode(start,length);
}
void print(int* a,int length,string startMessage=""){
cout<<startMessage<<" ";
for(int i=0;i<length;i++){
cout<<*(a+i)<<" ";
}
cout<<endl;
}
int main(){
init();
int a[10]={0,1,2,3,4,5,6,7,8,9};
print(a,10,"原数组");
encode(a,10);
print(a,10,"加密后");
init();
decode(a,10);
print(a,10,"解密后");
}
小人本潜水在思源的贴边 ID又多 又有钱 快活乐无边 谁知道站总监 他蛮横不留情面 他勾结站长目无天 占我ID夺我钱 我马甲跟他来翻脸 反被他来把经验减 我同学骂他欺新人 反被他捉进了小黑屋里面 874了一百遍啊一百遍 啊 最后他咬舌自尽 遗恨人间 他还将我和马甲赶出了思源 流落在人间 我为求回思源 无奈行乞在贴前 谁知道站总监他实在太阴险 知道此情形竟派人来暗算将我发文狂删到0篇 小人ID强 残命独留全 可怜马甲他 竟遭删 为求养ID 惟有傍人卖身自作践 一面苦赚钱 一面写诗篇 发誓把名气显 手刃总监意志坚啊 从此总监ID念心间 我永铭记此仇不供戴天 |