Как зашифровать и расшифровать номер, используя тот же ключ? - PullRequest
0 голосов
/ 18 февраля 2020

Мне нужен способ шифрования числа (скажем, 3423234234) с помощью секретного ключа, который также можно расшифровать с помощью того же ключа.

const encrypted = encrypt(number, key)
const decrypted = decrypt(encrypted, key)

Я пытался Crypto JS с использованием алгоритмов AES, DES, Rabbit и RC4, но это дает мне длинное зашифрованное значение со специальными символами.

Я хочу получить какое-то зашифрованное значение, например MongoDB's ObjectId (которое содержит только буквенные символы c символов) как 1575866cab3f22f0c8510451f293f405 и не должен превышать 20 или 40 символов).

1 Ответ

0 голосов
/ 20 февраля 2020

Я нашел способ.

const  decrypt = function (num) {
    const base = "tGVwFAPiJqh3maNHdZfby9eIQXcr2zvgD57YMn8KWCxkSUujpB10sL6oRTl4OE"
    num = num.toString()
    let lastChar, baseConverted = 0, index=0;
    while(num !== ''){
        lastChar = num.slice(-1);
        baseConverted += base.indexOf(lastChar) * Math.pow(62,index);
        index++;
        num = num.slice(0, num.length-1);
    }
    return baseConverted;
};
const  encrypt = function (num) {
    const base = "tGVwFAPiJqh3maNHdZfby9eIQXcr2zvgD57YMn8KWCxkSUujpB10sL6oRTl4OE"
    // console.log(base.length)
    let mod, baseConverted = '';
    while(num){
        mod = num%62;
        baseConverted = base.slice(mod, mod+1)+baseConverted;
        num = Math.floor(num/62);
    }
    return baseConverted;
};

module.exports = {
    encrypt,
    decrypt
}

Причина, по которой я этого хотел, потому что я хочу зашифровать все идентификаторы ресурса, прежде чем делиться им с клиентом.
Он расшифрует ключи при получении запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...