我有一个函数,需要一个随机的字节序列作为输入(例如,盐用于哈希密码)。我使用CSPRNG函数生成该字符串,然后编码为base64。
现在,我将该字符串传递给需要它的函数,但是该函数可以使用字节,因此,如果它接收到字符串,则通过将字符串读取为utf8将其转换为字节缓冲区。输入的字符串与使用CSPRNG函数生成的字节序列不同,而是base64编码的随机字节的utf8解码字符串。因此,如果我生成N个字节,则编码转换会将其转换为4/3 * N个字节。我可以假设转换后这些扩展字节仍然是随机的吗?有任何安全隐患吗?
下面是一个伪代码,以使其更清楚:
function needsRandBytes(rand) {
if (typeof rand == 'string') {
rand = Buffer.from(rand, 'utf8'); // here's the expansion
}
// use the rand bytes...
}
randBytes = generateRandomBytes(N); // cryptographically secure function
randString = randBytes.toString('base64');
needsRandBytes(randString);