'a'
mh-two-thousand-and-two
2024-04-12 44d2c92345cd156a59fc327b3060292a282d2893
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
var base64 = require('./base64');
var bytesToStr = require('./bytesToStr');
var strToBytes = require('./strToBytes');
exports = {
    encrypt: function(key, str) {
        return rc4(key, str, false);
    },
    decrypt: function(key, str) {
        return rc4(key, str, true);
    }
};
function rc4(key, str, decrypt) {
    key = strToBytes(key);
    if (!decrypt) {
        str = strToBytes(str);
    } else {
        str = base64.decode(str);
    }
    var result = [];
    var s = [];
    var j = 0;
    var i = 0;
    var x;
    for (i = 0; i < 256; i++) {
        s[i] = i;
    }
    for (i = 0; i < 256; i++) {
        j = (j + s[i] + key[i % key.length]) % 256;
        x = s[i];
        s[i] = s[j];
        s[j] = x;
    }
    i = 0;
    j = 0;
    for (var y = 0, len = str.length; y < len; y++) {
        i = (i + 1) % 256;
        j = (j + s[i]) % 256;
        x = s[i];
        s[i] = s[j];
        s[j] = x;
        result.push(str[y] ^ s[(s[i] + s[j]) % 256]);
    }
    return !decrypt ? base64.encode(result) : bytesToStr(result);
}
 
module.exports = exports;