RC4系列

简单解释一下RC4

  • RC4作为一个对称加密,加解密共用一套代码
  • 它本质上就是一个单字节的异或加密
  • 加密分为初始化和加密阶段
    • 初始化会对s盒进行赋值,密钥填充,置换
    • 最后在按一定规则从s盒中选取字节与明文进行异或得到密文

python自带库


from Crypto.Cipher import ARC4
key = b"UKFC"
data = b'Re__Point'
rc4 = ARC4.new(key)
data = rc4.decrypt(data)
print(data)
# b'v9\xfb&\x0bgS\x95<'

C++手动的实现

#include <bits/stdc++.h>
typedef unsigned longULONG;

/*初始化函数*/
void rc4_init(unsigned char*s, unsigned char*key, unsigned long Len)
{
    int i = 0, j = 0;
    char k[256] = { 0 };
    unsigned char tmp = 0;
    for (i = 0; i<256; i++)
    {
        s[i] = i;
        k[i] = key[i%Len];
    }
    for (i = 0; i<256; i++)
    {
        j = (j + s[i] + k[i]) % 256;
        tmp = s[i];
        s[i] = s[j];
        s[j] = tmp;
    }
}

/*加解密*/
void rc4_crypt(unsigned char*s, unsigned char*Data, unsigned long Len)
{
    int i = 0, j = 0, t = 0;
    unsigned long k = 0;
    unsigned char tmp;
    for (k = 0; k<Len; k++)
    {
        i = (i + 1) % 256;
        j = (j + s[i]) % 256;
        tmp = s[i];
        s[i] = s[j];
        s[j] = tmp;
        t = (s[i] + s[j]) % 256;
        Data[k] ^= s[t];
    }
}

int main()
{
    unsigned char s[256] = { 0 };
    char key[256] = { "UKFC" };
    char pData[512] = "Re__Point";
    unsigned long len = strlen(pData);
    rc4_init(s, (unsigned char*)key, strlen(key));
    rc4_crypt(s, (unsigned char*)pData, len);
    for(int i = 0; i < len; i++){
      printf("0x%x ",pData[i]);
    }
    return 0;
}
//0x76 0x39 0xfffffffb 0x26 0xb 0x67 0x53 0xffffff95 0x3c

相关推荐

  1. RC4系列

    2023-12-18 20:18:02       47 阅读
  2. RC4加密

    2023-12-18 20:18:02       56 阅读
  3. RC4加密解密逆向

    2023-12-18 20:18:02       53 阅读
  4. [Golang] RC4加解密

    2023-12-18 20:18:02       38 阅读
  5. [Golang] RC4加解密

    2023-12-18 20:18:02       38 阅读
  6. 【C语言】RC4 测试代码

    2023-12-18 20:18:02       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-18 20:18:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-18 20:18:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-18 20:18:02       82 阅读
  4. Python语言-面向对象

    2023-12-18 20:18:02       91 阅读

热门阅读

  1. gcov在嵌入式设备上使用说明更新

    2023-12-18 20:18:02       57 阅读
  2. C++入门(2)

    2023-12-18 20:18:02       43 阅读
  3. 高效运营的企业电脑监控软件有哪些?

    2023-12-18 20:18:02       63 阅读
  4. 深入理解Python中的 `yield` 和 `yield from`

    2023-12-18 20:18:02       48 阅读
  5. 秋季面试 redis 相关面试题

    2023-12-18 20:18:02       61 阅读
  6. 核和值域的关系:什么是矩阵的秩?

    2023-12-18 20:18:02       43 阅读
  7. 深入理解C语言中的指针运算和数组比较

    2023-12-18 20:18:02       53 阅读
  8. vue 高频面试题

    2023-12-18 20:18:02       62 阅读