1 回答
TA贡献1808条经验 获得超4个赞
Python 代码中的sign/verify实现不会自动执行散列,即用户必须在签名前显式散列数据。因此,在验证期间,用户必须根据数据的哈希值验证签名。
JavaScript 代码中的sign/verify实现会自动执行散列,即用户在签名之前不得对数据进行散列。因此,在验证期间,用户必须根据数据(而不是数据的散列)验证签名。哈希算法在密钥中指定,即在generateKey/ 中importKey使用 {hash: 'hash-algorithm'}。
发布的 JavaScript 代码中的错误是由根据数据的散列验证签名引起的。这是错误的。必须根据数据检查签名,即在 JavaScript 代码中的以下几行:
var hash=await crypto.subtle.digest('SHA-512', Uint8Array.from(atob(someBase64content), c => c.charCodeAt(0)))
...
var result=await crypto.subtle.verify("RSASSA-PKCS1-v1_5", cryptoKey, Uint8Array.from(atob(signature), c => c.charCodeAt(0)), hash)
必须替换为
var data=Uint8Array.from(atob(someBase64content), c => c.charCodeAt(0));
...
var result=await crypto.subtle.verify("RSASSA-PKCS1-v1_5", cryptoKey, Uint8Array.from(atob(signature), c => c.charCodeAt(0)), data)
尝试使用此更改执行验证。
添加回答
举报