RC4 对称加密算法实现:
bool rc4_sbox_impl(unsigned char* sbox, int sboxlen, unsigned char* key, int keylen, bool ascending) noexcept {
if (NULL == sbox || NULL == key || keylen < 1 || sboxlen < 1) {
return false;
}
for (int i = 0; i < sboxlen; i++) {
if (ascending) {
sbox[i] = (unsigned char)i;
}
else {
sbox[sboxlen - (i + 1)] = (unsigned char)i;
}
}
for (int i = 0, j = 0; i < sboxlen; i++) {
j = (j + sbox[i] + key[i % keylen]) % sboxlen;
unsigned char b = sbox[i];
sbox[i] = sbox[j];
sbox[j] = b;
}
return true;
}
bool rc4_sbox(unsigned char* sbox, int sboxlen, unsigned char* key, int keylen) noexcept {
return rc4_sbox_impl(sbox, sboxlen, key, keylen, true);
}
bool rc4_sbox_descending(unsigned char* sbox, int sboxlen, unsigned char* key, int keylen) noexcept {
return rc4_sbox_impl(sbox, sboxlen, key, keylen, false);
}
bool rc4_crypt_sbox(unsigned char* key, int keylen, unsigned char* sbox, int sboxlen, unsigned char* data, int datalen, int subtract, int E) noexcept {
if (NULL == key || keylen < 1 || NULL == data || datalen < 1 || NULL == sbox || sboxlen < 1) {
return false;