Nodejs 生成不包括给定字符的安全随机字符
Nodejs generate secure random characters not including given chars
我正在阅读有关在 nodejs 中生成安全随机生成器的内容。
我尝试了这个并且可以很好地生成安全的随机字符。
const crypto = require('crypto');
var length = 22
var generated = crypto.randomBytes(Math.ceil(length / 2))
.toString('hex').slice(0, length);
//it returned "14cf777d3ca307f5e78496"
如何在 nodejs 中生成不包括给定 pattern
的安全随机字符。
例如:['a', '2']
,它应该 return 保护没有给定模式的字符 14cf777d3cr307f5e78496
crypto module 不直接提供您要查找的内容。
虽然,您可以做的是继续递归生成您的密码,直到在内部找到 none 个模式。
为此,您可以使用以下内容:
async function generateRandomCrypto(length, patterns) {
const generated = await crypto.randomBytes(Math.ceil(length / 2)).toString('hex').slice(0, length);
let isValid = true;
for (pattern of patterns) {
if (generated.indexOf(pattern) !== -1) {
isValid = false;
break;
}
}
if (!isValid) {
return await generateRandomCrypto(length, patterns);
}
return generated;
}
现在,该函数将继续生成,直到它找到一个不包含 patterns
数组中提供的任何字符串的字符串。
如果您担心任何类型的性能影响 - 没有必要。
假设您的模式不是单字母字符串,它们出现在 运行dom 序列中的可能性很小 - 因此,生成可能 运行 一次。
并且即使,我也为你做了一个测试 - 我运行这个模式数组看起来像这样:
const patterns = ['a', 'b'];
我平均执行了 4 - 8 次函数。
我正在阅读有关在 nodejs 中生成安全随机生成器的内容。 我尝试了这个并且可以很好地生成安全的随机字符。
const crypto = require('crypto');
var length = 22
var generated = crypto.randomBytes(Math.ceil(length / 2))
.toString('hex').slice(0, length);
//it returned "14cf777d3ca307f5e78496"
如何在 nodejs 中生成不包括给定 pattern
的安全随机字符。
例如:['a', '2']
,它应该 return 保护没有给定模式的字符 14cf777d3cr307f5e78496
crypto module 不直接提供您要查找的内容。 虽然,您可以做的是继续递归生成您的密码,直到在内部找到 none 个模式。
为此,您可以使用以下内容:
async function generateRandomCrypto(length, patterns) {
const generated = await crypto.randomBytes(Math.ceil(length / 2)).toString('hex').slice(0, length);
let isValid = true;
for (pattern of patterns) {
if (generated.indexOf(pattern) !== -1) {
isValid = false;
break;
}
}
if (!isValid) {
return await generateRandomCrypto(length, patterns);
}
return generated;
}
现在,该函数将继续生成,直到它找到一个不包含 patterns
数组中提供的任何字符串的字符串。
如果您担心任何类型的性能影响 - 没有必要。
假设您的模式不是单字母字符串,它们出现在 运行dom 序列中的可能性很小 - 因此,生成可能 运行 一次。
并且即使,我也为你做了一个测试 - 我运行这个模式数组看起来像这样:
const patterns = ['a', 'b'];
我平均执行了 4 - 8 次函数。