В этой статье блога мы рассмотрим различные способы перезаписи функции mcrypt_rand в Node.js. mcrypt_rand — это криптографическая функция, используемая для генерации случайных чисел в расширении PHP mcrypt, которое устарело с версии PHP 7.1. Если вы переносите свою кодовую базу PHP на Node.js, важно понимать, как копировать функциональность mcrypt_rand. Мы рассмотрим несколько подходов на примерах кода, позволяющих добиться этого в Node.js.
Методы реализации mcrypt_rand в Node.js:
- Использование модуля шифрования:
Node.js предоставляет встроенный модуль «криптографии», который предлагает различные криптографические функции. Чтобы генерировать случайные числа, подобные mcrypt_rand, вы можете использовать методcrypto.randomBytes. Вот пример:
const crypto = require('crypto');
function mcrypt_rand(min, max) {
const range = max - min + 1;
const bytes = Math.ceil(Math.log2(range) / 8);
const buffer = crypto.randomBytes(bytes);
const value = buffer.readUIntBE(0, bytes);
return min + (value % range);
}
// Usage
const randomNumber = mcrypt_rand(1, 100);
console.log(randomNumber);
- Использование пакета Node.js “random-number-csprng”:
Пакет “random-number-csprng” предоставляет удобный способ генерации криптографически безопасных случайных чисел в Node.js. Вот пример:
const secureRandom = require('random-number-csprng');
async function mcrypt_rand(min, max) {
const randomNumber = await secureRandom(min, max);
return randomNumber;
}
// Usage
mcrypt_rand(1, 100)
.then(randomNumber => console.log(randomNumber))
.catch(error => console.error(error));
- Использование пакета «uuid».
Пакет «uuid» позволяет генерировать универсально уникальные идентификаторы (UUID) в Node.js. Хотя UUID не совсем эквивалентны случайным числам, в определенных сценариях их можно использовать вместо них. Вот пример:
const { v4: uuidv4 } = require('uuid');
function mcrypt_rand(min, max) {
const range = max - min + 1;
const randomNumber = Math.floor(Math.random() * range) + min;
return uuidv4({ random: [...Array(16)].map(() => randomNumber) });
}
// Usage
const randomNumber = mcrypt_rand(1, 100);
console.log(randomNumber);