日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RC4算法实现

發(fā)布時間:2024/4/11 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RC4算法实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、密鑰流:RC4算法的關鍵是根據(jù)明文和密鑰生成相應的密鑰流,密鑰流的長度和明文的長度是對應的,也就是說明文的長度是500字節(jié),那么密鑰流也是500字節(jié)。當然,加密生成的密文也是500字節(jié),因為密文第i字節(jié)=明文第i字節(jié)^密鑰流第i字節(jié);

2、狀態(tài)向量S:長度為256,S[0],S[1].....S[255]。每個單元都是一個字節(jié),算法運行的任何時候,S都包括0-255的8比特數(shù)的排列組合,只不過值的位置發(fā)生了變換;

3、臨時向量T:長度也為256,每個單元也是一個字節(jié)。如果密鑰的長度是256字節(jié),就直接把密鑰的值賦給T,否則,輪轉(zhuǎn)地將密鑰的每個字節(jié)賦給T;

?4、密鑰K:長度為1-256字節(jié),注意密鑰的長度?keylen?與明文長度、密鑰流的長度沒有必然關系,通常密鑰的長度取為16字節(jié)(128比特)。

5、算法實現(xiàn)

[cpp]?view plaincopy
  • //rc4.h????
  • template<class?T>?inline?void????
  • swap(T&?i,?T&?j)????
  • {????
  • ????T?tmp?=?i;????
  • ????i?=?j;????
  • ????j?=?tmp;????
  • }????
  • class?RC4????
  • {????
  • public:????
  • ????void?SetKey(const?char*?key,?int?keylen);????
  • ????void?Transform(char*?output,?const?char*?input,?int?len);????
  • private:????
  • ????unsigned?char?key_[256];????
  • };????
  • /????
  • //rc4.cc????
  • #include?"rc4.h"????
  • void?RC4::SetKey(const?char*?key,?int?keylen)????
  • {????
  • ????for?(int?i?=?0;?i?<?256;?i++)????
  • ????{????
  • ????????key_[i]?=?i;????
  • ????}????
  • ????int?j?=?0;????
  • ????for?(int?i?=?0;?i?<?256;?i++)????
  • ????{????
  • ????????j?=?(j?+?key_[i]?+?key[i%keylen])?%?256;????
  • ????????swap(key_[i],?key_[j]);????
  • ????}????
  • }????
  • void?RC4::Transform(char*?output,?const?char*?input,?int?len)????
  • {????
  • ????int?i?=?0,?j?=?0;????
  • ????for?(int?k?=?0;?k?<?len;?k++)????
  • ????{????
  • ????????i?=?(i?+?1)?%?256;????
  • ????????j?=?(j?+?key_[i])?%?256;????
  • ????????swap(key_[i],?key_[j]);????
  • ????????unsigned?char?subkey?=?key_[(key_[i]?+?key_[j])?%?256];????
  • ????????output[k]?=?subkey?^?input[k];????
  • ????}????
  • }????
  • /????
  • //main.cc????
  • #include?<stdio.h>????
  • #include?<string.h>????
  • #include?<stdlib.h>????
  • #include?"rc4.h"????
  • int?main()????
  • {????
  • ????char?input[256]?=?"Times?teaches?all?things?to?him?who?lives?forever?but?I?have?not?the?luxury?of?eternity.";????
  • ????char?output[256]?=?"";????
  • ????printf("before?encrypt:%s/n",?input);????
  • ????const?int?keylen?=?16;????
  • ????char?key[keylen]?=?"";????
  • ????for?(int?i?=?0;?i?<?keylen;?i++)????
  • ????{????
  • ????????key[i]?=?rand()?%?256;????
  • ????}????
  • ????RC4?rc4encrypt,?rc4decrypt;????
  • ????rc4encrypt.SetKey(key,?keylen);????
  • ????rc4decrypt.SetKey(key,?keylen);????
  • ????rc4encrypt.Transform(output,?input,?strlen(input));????
  • ????printf("after?encrypt:?%s/n",?output);????
  • ????rc4decrypt.Transform(output,?output,?strlen(input));????
  • ????printf("after?decrypt:?%s/n",?output);????
  • ????return?0;????
  • } ? ?
  • 總結

    以上是生活随笔為你收集整理的RC4算法实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。