PHP 中實現 RC4加密解密
阿新 • • 發佈:2018-11-10
RC4演算法 RC4加密演算法是大名鼎鼎的RSA三人組中的頭號人物Ron Rivest在1987年設計的金鑰長度可變的流加密演算法簇。RC4演算法是一種在電子資訊領域加密的技術手段,用於無線通訊網路,是一種電子密碼,只有經過授權(繳納相應費用)的使用者才能享受該服務。
RC4於1987年提出,是一種對稱加密演算法,也就是說使用的金鑰為單鑰(或稱為私鑰)。RC4不是對明文進行分組處理,而是位元組流的方式依次加密明文中的每一個位元組,解密的時候也是依次對密文中的每一個位元組進行解密。
RC4演算法的特點是演算法簡單,執行速度快,而且金鑰長度是可變的,可變範圍為1-256位元組(8-2048位元),在如今技術支援的前提下,當金鑰長度為128位元時,用暴力法搜尋金鑰已經不太可行,所以可以預見RC4的金鑰範圍任然可以在今後相當長的時間裡抵禦暴力搜尋金鑰的攻擊。實際上,如今也沒有找到對於128bit金鑰長度的RC4加密演算法的有效攻擊方法
/*
* rc4加密演算法
* $pwd 金鑰
* $data 要加密的資料
*/
function getRc4Encode($pwd, $data) {
$cipher = '';
$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;
}