前端 JS生成32位UUID (安全的随机数)

程序员桔子 2024-06-18 14:33:01 阅读 56

JavaScript的Math.random()实现PRNG(伪随机数序列发生器),该PRNG是可移植和可重复的,因此如果两个Math.random()使用相同的种子,会生成相同的数值序列。

例如:下面的代码使用Math.random()

//创建的Token很容易被猜到。function getToken (){var token =Math.random();return token;}`

JavaScript在安全性要求较高的环境中生成随机数,常规的建议是使用 Mozilla API 中的**window.crypto.getRandomValues()**函数,但这种方法受限于浏览器的兼容性,只在较新的版本(Chrome>=11.0,

Firefox>=21, Edge, IE>=11,

Safari>=3.1)可以使用。如果考虑到旧版本浏览器,则应在javascript之外处理PRNG功能。

/** * @description: 生成随机数0-255 * @param {num} 最大值 */export const random8bitValue = (num) => { // 创建一个长度为1的Uint8Array类型数组 let randomValues = new Uint8Array(1); // 使用window.crypto.getRandomValues()方法填充数组 window.crypto.getRandomValues(randomValues); // 获取0到num的随机整数 let randomInteger = num ? randomValues[0] % num : randomValues[0]; return randomInteger;};/** * @description: 生成随机数0-4294967295(2^32-1) * @param {num} 最大值 */export const random32bitValue = (num) => { // 创建一个长度为1的Uint8Array类型数组 let randomValues = new Uint32Array(1); // 使用window.crypto.getRandomValues()方法填充数组 window.crypto.getRandomValues(randomValues); // 获取0到num的随机整数 let randomInteger = num ? randomValues[0] % num : randomValues[0]; return randomInteger;};/** * @description: 生成32位 uuid 8-4-4-4-12的格式 */export const generateUUID = () => { let data = new Uint8Array(16); window.crypto.getRandomValues(data); let uuid = Array.from(data) .map((byte) => byte.toString(16).padStart(2, "0")) .join(""); // 切割 8-4-4-4-12的格式 return ( uuid.slice(0, 8) + "-" + uuid.slice(8, 12) + "-" + uuid.slice(12, 16) + "-" + uuid.slice(16, 20) + "-" + uuid.slice(20) );};/** * @description: 生成32位 a52d50373c9543fe9845821a1b1cfc00 */export const generateUUID2 = () => { let uuid = Array.prototype.map.call(window.crypto.getRandomValues(new Uint8Array(16)), (item) => item.toString(16)).join("");if (uuid.length < 32) { uuid += "0".repeat(32 - uuid.length); // 添加0补足位数}return uuid;};

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

扫码领取



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。