C# 代码如下:
public string EncryptRC4wq(string ckey, string str)
{
int[] s = new int[256];
for (int i = 0; i < 256; i++)
{
s[i] = i;
}
//密钥转数组
char[] keys = ckey.ToCharArray();//密钥转字符数组
int[] key = new int[keys.Length];
for (int i = 0; i < keys.Length; i++)
{
key[i] = keys[i];
}
//明文转数组
char[] datas = str.ToCharArray();
int[] mingwen = new int[datas.Length];
for (int i = 0; i < datas.Length; i++)
{
mingwen[i] = datas[i];
}
//通过循环得到 256 位的数组(密钥)
int j = 0;
int key_len = key.Length;
for (int i = 0; i < 256; i++)
{
j = (j + s[i] + key[i% key_len])%256;
//swap
int temp = s[i];
s[i] = s[j];
s[j] = temp;
}
//根据上面的 256 的密钥数组 和 明文得到密文数组
int x = 0, y = 0, c;
int data_len = mingwen.Length;
int[] miwen = new int[data_len];
string ret = "";
for (int i = 0; i < data_len; i++)
{
x = (x + 1) % 256;
y = (y + s[x]) % 256;
//swap
int temp = s[x];
s[x] = s[y];
s[y] = temp;
c = s[x]+s[y];
c = c % 256;
miwen[i] = mingwen[i] ^ s[c];
ret +=(char)miwen[i];
}
return ret;
}
PHP 代码如下
// RC4 加密方法
// $key 为 加密密匙
// $pt 为 加密字符串
// 加密内容再次加密则为解密
public function RC4($key, $pt){
$s = array();
for ($i=0; $i<256; $i++) {
$s[$i] = $i;
}
$j = 0;
$key_len = strlen($key);
for ($i=0; $i<256; $i++) {
$j = ($j + $s[$i] + ord($key[$i % $key_len])) % 256;
//swap
$x = $s[$i];
$s[$i] = $s[$j];
$s[$j] = $x;
}
$i = 0;
$j = 0;
$ct = '';
$data_len = strlen($pt);
for ($y=0; $y< $data_len; $y++) {
$i = ($i + 1) % 256;
$j = ($j + $s[$i]) % 256;
//swap
$x = $s[$i];
$s[$i] = $s[$j];
$s[$j] = $x;
$ct .= $pt[$y] ^ chr($s[($s[$i] + $s[$j]) % 256]);
}
return $ct;
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.