PHP的hash_hmac()是否有等效的JavaScript函数?
我们正在开发一个在线课程网站PHP的hash_hmac()是否有等效的JavaScript函数?,javascript,php,amazon-web-services,Javascript,Php,Amazon Web Services,我们正在开发一个在线课程网站 课程有音频和文本(无视频) 音频文件存储在Amazon S3上,并通过AWS CloudFront交付 每当用户想要播放课程音频文件时, 网站(服务器端)向CloudFront发送请求以获取音频文件 每个请求还包括一个签名和一个随机数 我们使用PHP hash_hmac生成签名,如下所示: $signature = hash_hmac('sha256', $random_number, $secret, true); 双方(网站和CloudFront功能)都有硬编
课程有音频和文本(无视频)
音频文件存储在Amazon S3上,并通过AWS CloudFront交付
每当用户想要播放课程音频文件时,
网站(服务器端)向CloudFront发送请求以获取音频文件
每个请求还包括一个签名和一个随机数 我们使用PHP hash_hmac生成签名,如下所示:
$signature = hash_hmac('sha256', $random_number, $secret, true);
双方(网站和CloudFront功能)都有硬编码的密钥
一旦CloudFront收到请求,“CloudFront功能”(新AWS功能)正在验证令牌
CloudFront函数只能使用JavaScript(而不是NodeJS或Python)
我们希望CloudFront函数使用JavaScript简单地运行hash_hmac() 然后比较签名,但我们找不到等效的JS函数。 我们详细检查了StackOverflow,但找不到等效的JS函数
我们的发现:
Google的Crypto JS库已被弃用
无法使用NodeJS加密模块,因为我们使用纯JavaScript
有人能分享一个关于如何在JavaScript上运行hash_hmac的链接或代码片段吗?是的,有一个本机:
(异步函数(){
const someData=‘非常真实的数据’;
const key=wait window.crypto.minute.generateKey({
名称:“HMAC”,
散列:{
名称:“SHA-256”
}
},
是的,
[“签字”、“核实”];
设enc=newtextcoder().encode(someData);
常量签名=等待加密微妙签名('HMAC',密钥,enc);
console.log(签名);//ArrayBuffer(32)
const valid=等待加密微妙验证('HMAC',密钥,签名,enc);
console.log(有效);
})();代码>所以一种方法是使用上面提到的JS crypto.division.sign@Guerric p
事实证明,还有另一种方法可以实现这一目标
阅读完整的CloudFront开发者指南后,
我发现了以下内容:
NodeJS有一个很棒的模块,叫做Crypto。
通常,我们不能向JavaScript代码中添加NodeJS模块。
但是,CloudFront函数(仅使用普通JS)也支持NodeJS加密模块:
加密模块(crypto)提供标准哈希和
基于散列的消息身份验证代码(HMAC)帮助程序。你可以加载
使用require('crypto')的模块。该模块提供以下功能
方法的行为与其对应的Node.js完全相同
这回答了你的问题吗@biesior我不确定这是否符合“客户端”,因为脚本是在CloudFrontEdge位置执行的,而不是在请求的浏览器中。事实上,当我再次阅读您的问题时,使用HMAC是没有意义的,因为密钥(假定是私有的)实际上是公开的,因为包含在前端中