网络加密API:如何发现支持的算法
Web Cryptography API: Howto discover supported algorithms?
Web Cryptography API支持通过JavaScript使用浏览器的原生加密功能,例如可靠的随机数生成器或使用不同算法进行加密或签名的可能性。
该规范列出了算法的概述,作为实现者的起点,但添加了以下编辑注释:
注意:列出的所有算法都应被视为";风险特征";,除非实现者采用它们。将其纳入编辑草案反映了社区成员对其纳入的请求,并作为确保本规范中定义的API的健壮性的练习纳入。
因此,算法列表和建议可能会在未来的修订中发生重大更改。
据我所知,规范背后的想法是为密码学提供一个接口,而不是写下特定的算法(这完全有意义!)。
如何确定客户端是否支持特定的算法?隐藏实现细节是一种很好的做法,但由于算法必须有一个所谓的可识别的算法名称,我不明白你为什么不想公开注册的算法。仍然没有指定接口,您注册算法的对象描述如下:
本规范使用了一个内部对象[[supportedAlgorithms]]。
此内部对象不向应用程序公开。
在当前状态下发现可用算法的唯一可能性是捕获微妙接口的NotSupportedError。
在我看来,发现是简单的程序流,错误应该作为异常处理,而不是实现逻辑。
有什么提示或建议吗?链接到适当的w3c邮件列表讨论也很感激。
未计划支持算法发现接口。
该问题在2012年的w3c工作组邮件列表中进行了详细讨论,其中提出了一些问题,请参阅Threads"RE:Strawman针对低级API的建议-关于算法和算法命名的互操作集"answers"RE:算法发现(RE:StrawmanProposal针对低级API的建议-有关算法和算法名称的互操作集合)"。
讨论的一点总结了发现机制的问题:
(1) 当我阅读各种附录时,发现算法而不是可能被允许的参数的排列,或者支持,因此算法的发现可能是成功的,但是可能仍然失败,因此发现的额外努力是开销和额外的代码路径
在2014年7月的一次电话会议上,工作组决定通过使用配置文件"稍后解决问题"。规范中也提到了这一点:
特别是,我们希望创建一个"浏览器配置文件"用于Web浏览器的可互操作算法。
其想法是创建配置文件,例如传统的网络浏览器、智能电视等。如果存在特定的配置文件,则必须支持某些算法。这将在未来的测试阶段后决定。
我不确定您的实现需求是什么,也不确定您在运行时需要了解支持的算法,但我在一个特定的项目中使用了WebCrypto API,其中预先知道了所需的算法。
我们能够在初始化期间执行一系列简单的测试,以确定我们的算法是否得到支持。这一点,再加上一些已知的不可用性(window.msCrypto定义的?IE11和SHA-1缺失,window.crypto.webkitSubtle定义的?Webkit和AES-GCM缺失等),使我们至少能够尽早知道是否存在支持,并使用替代算法、替代实现或失败。
- jQuery-2.1.1.min.js或最新版本jQuery-2.13.min.js不会't支持'@
- jQuery检测浏览器是否支持Zoom
- 错误:对象没有't支持'自动完成'
- EmberJS中支持单字母单词模型
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- Internet Explorer缺少占位符支持,特别是密码字段
- 为什么我得到错误IE修剪方法是't支持
- 任何浏览器都不支持javascript函数
- GTK百老汇支持同时连接
- JQuery示例不起作用-“;对象没有't支持属性或方法'按钮'&”;
- 对象不支持属性或方法“自动完成”
- javascript从任何嵌入式flash视频中发现.flvurl
- 对象没有'不支持set_viewXML
- Javascript Q库浏览器支持
- 您的平台不支持RxJS-Array.observe
- React Native当前是否支持访问用户'的通讯簿
- 将HTML(支持文件)中的令牌(字符串、数字等)传递给LogiXML
- 错误:语法错误,无法识别的表达式:不支持的伪:无效/RectJS/Unit Testing
- 网络加密API:如何发现支持的算法
- 如何发现浏览器是否支持网络字体或不使用javascript