/**
* Hashes user data for non-production use with optional flags.
*
* @param {string} data The data to hash.
* @param {string} [algorithm='sha256'] The hashing algorithm to use (e.g., 'md5', 'sha1', 'sha256', 'sha512'). Defaults to 'sha256'.
* @param {boolean} [salt=true] Whether to include a salt. Defaults to true.
* @param {string} [saltString='randomSalt'] The salt string to use. Defaults to 'randomSalt'.
* @returns {string} The hashed data. Returns an empty string if data is invalid.
*/
function hashData(data, algorithm = 'sha256', salt = true, saltString = 'randomSalt') {
if (typeof data !== 'string' || data.length === 0) {
return ""; // Handle invalid input
}
const crypto = require('crypto');
let hash;
try {
let hashOptions = {};
switch (algorithm.toLowerCase()) {
case 'md5':
hashOptions = { algorithm: 'md5' };
break;
case 'sha1':
hashOptions = { algorithm: 'sha1' };
break;
case 'sha256':
hashOptions = { algorithm: 'sha256' };
break;
case 'sha512':
hashOptions = { algorithm: 'sha512' };
break;
default:
console.warn(`Unknown algorithm: ${algorithm}. Defaulting to sha256.`);
hashOptions = { algorithm: 'sha256' };
}
let hashValue;
if (salt) {
hashValue = crypto.createHash(algorithm, data + saltString).digest('hex');
} else {
hashValue = crypto.createHash(algorithm).update(data).digest('hex');
}
return hashValue;
} catch (error) {
console.error("Hashing error:", error);
return ""; // Handle errors
}
}
module.exports = hashData;
Add your comment