C# RC4Engine(加密/解密)
2018-07-20 来源:open-open
RC4是密钥长度可变的流加密算法簇。其核心部分的S-box长度无限制
,该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非
线性。RC4包括初始化算法(KSA)与伪随机数生成算法(PRGA)两个部分。
public static byte[] rc4_init(string key)
{
byte[] box = new byte[255];
for (int i = 0; i < 255; i++)
box[i] = (byte)i;
for (int i = 0, j = 0; i < 255; i++)
{
j = (j + box[i] + key[i % key.Length]) % 255;
byte b = box[i];
box[i] = box[j];
box[j] = b;
}
return box;
}
上面是初始化算法主要随机打烂S-box中的密钥序列顺序与初始化
Key值。首先定义一个byte[] box缓冲区,然后进行首次的循环,
把S-Box赋入初值,第二次循环进行随机打烂S-box密钥序列。
public static string rc4_crypt(string key, string value)
{
byte[] box = rc4_init(key);
char[] buffer = value.ToCharArray();
for (int i = 0, low = 0, high = 0, mid; i < buffer.Length; i++)
{
low = (low + 1) % 255;
high = (high + box[i % 255]) % 255;
byte b = box[low];
box[low] = box[high];
box[high] = b;
mid = (box[low] + box[high]) % 255;
buffer[i] ^= (char)box[mid];
}
return new string(buffer);
}
上面是伪子随机数生成部分,首先调用rc4_init(key)获取到
被随机打烂的密钥序列S-box,然后通过把value转换成buffer
缓冲区,我们按照buffer.Length进行计次循环,首先我们需要
计算伪低位索引 low = (low + 1) % 255; 然后计算伪高位索引
high = (high + box[i % 255]) % 255,到了这里我们开始交换
两者的值,这里为伪随机数生成部分,下面则通过把两者所以
的S-box中的值相加% 255取得伪中间索引,与buffer[i] ^= (ch
ar)box[mid]; 进行异或并赋值 最后在把buffer返回给调用方。
这个算法就基本完成了 如如果我解释的并不是很清楚 你也可以
点开这个链接,http://baike.baidu.com/link?url=PpEcozy2oqUap
zng83HJ3-9jknr_qbg-mIUReRYowP215l-RP4R5qEjw8jn0X67QG
M8mJJlAIuEUhtPQNC4QOa
RC4 应用代码:
public static void Main(string[] args){
string enc = rc4_crypt("China", "Japan"); // 加密
string dec = rc4_crypt("China", enc); // 解密
}
标签: 代码
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇: js检测浏览器版本方法
下一篇: php实现定时创建指定大小文件脚本