JS 安全随机数 window.crypto及其兼容性

news/2024/11/23 1:44:07/

    在JS中经常使用Math.Random|()函数来产生随机数,但这个函数产生的随机数并不具有真正的随机性,而且加密型不够强。因此在特定的需要加密性强的安全随机数时,可以使用JS提供的windows.crypto来生成随机数。
    Window.crypto只读属性返回与全局对象关联的 Crypto对象。 这个对象允许网页访问某些加密相关服务。
    为了确保足够的性能,不使用真正的随机数生成器,但是它们正在使用具有足够熵值伪随机数生成器。它所使用的 PRNG 的实现与其他不同,但适用于加密的用途。该实现还需要使用具有足够熵的种子。
    使用crypto尽可能在https 环境下使用,否则有时会返回undefined 或者 空对象
函数比较
Math.random() : 返回介于 0(包含) ~ 1(不包含) 之间的一个随机数。该函数不是加密安全的随机数生成器。
window.crypto.getRandomValues(typedArray) : 返回非0的正整数,Crypto.getRandomValues(typedArray) 方法可以获取符合密码学安全性要求的随机值。
typedArray是一个基于整数的 TypedArray,其可以是 Int8Array、Uint8Array、Int16Array、 Uint16Array、 Int32Array 或 Uint32Array。生成的属技术会存储在typedArray 数组中。

使用方法
如果只需要生成安全随机数,可以按下面代码所示使用:

  var arr = new Uint16Array(8);window.crypto.getRandomValues(arr);for (var i = 0; i < arr.length; i++) {console.log(arr[i]);}

这里需要注意:
window.crypto只能保证在通用浏览器上正常运行,如果要做兼容,需要使用如下前缀:

  • webkit 兼容Chrome,Safari,Opera的新版本,几乎所有的iOS浏览器(包括iOS版的Firefox);基本上,任何基于WebKit的浏览器
  • moz 兼容Firefox
  • o 兼容旧版,WebKit之前的版本以及Opera版
  • ms 兼容微软的Internet Explorer和Microsoft Edge

因此,要做全版本兼容,需要这样使用:

  var arr = new Uint16Array(8);var crypto = window.crypto || window.webkitCrypto || window.mozCrypto || window.oCrypto || window.msCrypto;window.crypto.getRandomValues(arr);for (var i = 0; i < arr.length; i++) {console.log(arr[i]);}

除了生成安全随机数,window.crypto还可以对数据进行加解密(crypto rsa 只有一个算法(RSA-OAEP)支持加密 / 解密),通常用法有:

  • 生成公私钥对:crypto.subtle.generateKey
  • 导出公私钥: window.crypto.subtle.exportKe
  • 导入公私钥:window.crypto.subtle.importKey
  • 加密:window.crypto.subtle.wrapKey
  • 解密:window.crypto.subtle.unwrapKey
  • 签名:crypto.subtle.sign
  • 验签:crypto.subtle.verify
  • 加密明文:crypto.subtle.encrypt
  • 解密密文:crypto.subtle.decrypt

由于并不常用,在这里不记录具体用法,有空再详细说明。


http://www.ppmy.cn/news/409984.html

相关文章

Xmanager7中文版(免注册码) 附安装教程

Xmanager7中文版 是一款方便易用且功能强大远程桌面管理工具&#xff0c;该软件能够完美在在windows平台下连接远程服务器进行管理操作&#xff0c;是市场上先进的PC X服务器。除此之外&#xff0c;这款软件也支持一键连接到unix、linux服务器系统进行文件的管理操作&#xff0…

MyEclipse中没有支持tomcat7.x时候怎么使用Tomcat7

我使用的是32位的eclipse3.3&#xff0c;32位的jdk1.6&#xff0c;32位的Tomcat7.0&#xff0c;并且为eclipse装了插件版本的MyEclipse5.1。成功安装好上述软件之后再eclipse界面通过tomcat的图标启动tomcat服务器的时候发现不能成功启动&#xff0c;网上查了资料之后发现是因为…

Windows 7 Sp1 x64 无法安装英文语言包(已解决)

原文地址为&#xff1a; Windows 7 Sp1 x64 无法安装英文语言包&#xff08;已解决&#xff09; Windows 7 Sp1 x64 无法安装英文语言包&#xff08;已解决&#xff09; 旗舰版window7 x64,升级到SP1后,无法安装英文语言包 ghost了一个中文版的64位的旗舰版的window7 SP1.想…

在RHEL7下 启动图形化界面(x windows)

---要在RHEL7.x下安装如下包之后,startx才能正常调出GUI界面 yum groupinstall "Server with GUI" ---如下命令仅仅针对RHEL6.x的,在RHEL7.x下虽然能执行如下命令,但是RHEL7的startx不能正常调出RHEL7的GUI界面 yum groupinstall "X Window System" 参考文…

群辉(NAS)的虚拟机套件环境下安装window7系统

一、首先准备windows7镜像&#xff08;ISO&#xff09;文件 ①打开https://msdn.itellyou.cn/下载Windows7系统 ②如果是在本地PC下载的系统镜像文件&#xff0c;则需要将该系统镜像文件上传到NAS中 ③上传成功后则会在chat-->系统镜像下面有window7的镜像文件 ④此时正式…

记录好项目D5

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是 商品信息管理系统 技术栈&#xff1a;SpringBoot Mybatis Thymelea…

桌面显卡天梯图 Nvidia显卡算力表

参考文章1&#xff1a;http://www.mydrivers.com/zhuanti/tianti/gpu/ 参考文章2&#xff1a;https://developer.nvidia.com/cuda-gpus#collapse4

NVIDIA显卡算力查询

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/xiaxuesong666/article/details/79192162 查询的官网地址https://developer.nvidia.com/cuda-gpus#c…