RC4 加/解密算法


rc4是面向字节流的加密算法,通过在加密地过程中不断地修改变换表来达到算法强度和校验序列的完整性
  (如果丢失了其中一个字节,那么所有在该字节后解密的数据都会损坏)。
  加密流程:
  1.1 加密表的初始化(设加密表的长度为256,事实上加密表的长度可以任意,只是在实现时256可以用一个字节表示索引)
    |-----------------------------------------|
    |初始化Security Box (Sbox)          |---->|------------------------------------|
    |(设为0~255即可,算法上没有    |      | for i = 0, 255 =>  Sbox = i |
    |要求,只要和解密表一致就可以) |      |------------------------------------|
    |-----------------------------------------|
                |
    |-----------------------------------------|      |-----------------------------------------------|
    |通过key来扰乱Sbox,key可以是任|---->| m = n = 0, extend(key, 256 )            |
    |意相量好的字符序列,它最长是  |      | for i = 0, 256                                      |
    |和Sbox的长度一样,如果它比Sbox|      |  m = (m + Sbox + key[n+1])%256  |
    |长度少,那么重复使用                |        |  Swap(Sbox, Sbox[m])                  |
    |-----------------------------------------|      |  n = (n +1 )%256                              |
                                                                |-----------------------------------------------|
                

    1.2 加密字节
    |--------------------------------------------|      |-----------------------------------------------|
    | 在Sbox中查找加密字节,并修改    |---->| i, j = (Sbox.idx_i+1)%256, Sbox.idx_j  |
    | Sbox 的值                                      |      | j = (Sbox + j) % 256                        |
    |--------------------------------------------|      | code = s[(Sbox + Sbox[j]) % 256]    |
                    |                                                | Swap(Sbox, Sbox[j])                        |
                    |                                                | Sbox.idx_i, Sbox.idx_j = i, j                |
                    |                                                | return code                                        |
                    |                                                |------------------------------------------------|
                    |
    |----------------------------------|      |----------------------------------------|
    |加密对应的输入字节          |---->|out_byte = in_byte XOR code    |
    |----------------------------------|      |-----------------------------------------|
    
    
  解密表的初始化过程和解密的过程完全一样,也就是说按照上面的算法生成两份表Table1和Table2,那么
  input_byte = crypt(crypt(input_byte, Table1), Table2)--> input_byte XOR s_code XOR s_code = input_byte
  
  从加解密的过程来看:
  A.rc4的强度是基于key和Sbox的置换
  B.必须保证加密Sbox和解密Sbox的在加密解密前状态一致,而且只要保证一致,那么可以使用任意的算法扰乱加密表和解密表甚至可以用动态的Key
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值