RC4加密算法

简介: RC4加密算法

Ron Rivest在1987年提出了RC4加密方法,开始他并不打算公开此密码的加密规则,RC4 是商业机密,不公开密码的加密规则会提高安全性,不过在1994年,一位匿名人士在公共场所张贴了对密码规则的描述。

认识

对称密码算法

加密与解密使用相同的代码

流密码加密算法

加密和解密双方使用相同伪随机加密数据流(pseudo-randomstream)作为密钥,明文数据每次与密钥数据流顺次对应加密,得到密文数据流。

密钥长度可变

它以一个足够大的表S为基础,对表进行非线性变换,产生密钥流

优点

不占内存

运算速度快

缺点

密钥大小可变

容易受到攻击

初始化

两样东西,S盒和Key(密钥)

在初始化的过程中,密钥的主要功能是将S-box搅乱

S盒

S盒用一个长度是256的数组来表示S盒,每个元素的值都是0到255之间的整数

Key

密钥,功能是搅乱S盒的顺序

加密

两样东西:要加密的数据data,初始化汇总搅乱的S盒

C++实现过程

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void init_s(vector<unsigned char>& s, vector<unsigned char>& rc4key) {
    for (int i = 0; i < 256; i++) s[i] = i;
    int j = 0;
    for (int i = 0; i < 256; i++) {
        j = (j + s[i] + rc4key[i % rc4key.size()]) % 256;
        swap(s[i], s[j]);
    }
}
void create_key(vector<unsigned char>& s, vector<unsigned char>& keystream, int buffer_len) {
    int i = 0, j = 0;
    int t, counter;
    for (counter = 0; counter < buffer_len; counter++) {
        i = (i + 1) % 256;
        j = (s[i] + j) % 256;
        swap(s[i], s[j]);
        t = (s[i] + s[j]) % 256;
        keystream[counter] = s[t];
    }
}
void rc4(vector<unsigned char>& buffer_data, vector<unsigned char>& rc4key, vector<unsigned char>& result) {
    vector<unsigned char> s(256);
    init_s(s, rc4key);
    vector<unsigned char> keystream(buffer_data.size());
    create_key(s, keystream, buffer_data.size());
    for (int i = 0; i < buffer_data.size(); i++) {
        result[i] = buffer_data[i] ^ keystream[i];
    }
}
int main() {
    string input = "Crypto";
    vector<unsigned char> buffer_data(input.begin(), input.end());
    vector<unsigned char> rc4key{'k', 'e', 'y'}; // 密钥
    vector<unsigned char> result(buffer_data.size());
    // RC4 加密
    rc4(buffer_data, rc4key, result);
    cout << "加密后的结果:";
    for (int i = 0; i < result.size(); i++) {
        cout << result[i];
    }
    cout << endl;
    // RC4 解密
    rc4(result, rc4key, buffer_data);
    cout << "解密后的结果:";
    for (int i = 0; i < buffer_data.size(); i++) {
        cout << buffer_data[i];
    }
    cout << endl;
    return 0;
}
相关文章
|
14天前
|
算法 安全 网络安全
加密解密(RC4)
加密解密(RC4)
|
算法 JavaScript 数据安全/隐私保护
|
Java 数据安全/隐私保护
Java实现最电话号码的简单加密源码
Java实现最电话号码的简单加密源码
18 0
|
3月前
|
存储 安全 算法
【接口加密】Java中的接口加密实践
【接口加密】Java中的接口加密实践
|
3月前
|
算法 安全 Java
Java 实现 RSA 非对称加密算法-加解密和签名验签
Java 实现 RSA 非对称加密算法-加解密和签名验签
|
Java 数据安全/隐私保护
java实现加密电话号码,有具体的加密流程注释
java实现加密电话号码,有具体的加密流程注释
31 0
|
4月前
|
存储 算法 安全
3分钟快速了解使用Java进行对称加密
对称加密算法有很多种,其中较为知名的有AES(高级加密标准)、DES(数据加密标准)以及3DES(三重数据加密算法)等。这些算法在不同的场景下有着广泛的应用,为保障数据安全提供了有力支持。
62 0