我正在尝试使用 WEB Crypto API 签署文本。我依赖第 3 方从智能卡中提取 certificate,该智能卡返回它的 Base64 字符串表示形式。据我了解,首先我需要将其转换为 cryptoKey 对象,以将其传递给 sign 方法,这就是错误发生的地方。 。
这就是我正在做的:
const res = await fetch("https://localhost:53952/getsigner",{
method: "POST",
headers: {
'Content-type': 'application/json',
},
body: "{}"
})
const body = await res.json();
const signCertString = body.chain[0];
const binaryCert = Uint8Array.from(atob(signCertString), c => c.charCodeAt(0));
const certBuffer = binaryCert.buffer;
crypto.subtle.importKey(
"pkcs8",
certBuffer,
{
name: "RSASSA-PKCS1-v1_5",
hash: { name: "SHA-256" },
},
true,
["sign"]
)
.then((cryptoKey) => {
console.log("CryptoKey object created:", cryptoKey);
})
.catch((error) => {
console.error("Error creating CryptoKey object:", error);
});
Uint8Array.from
仅接受 1 个参数,一个数组。
Uint8Array.from(atob(signCertString), c => c.charCodeAt(0))
你可能想做这样的事情:
Uint8Array.from([...atob(signCertString)].map(c => c.charCodeAt(0)))