前端生成RSA秘钥(利用window.crypto对象生成,不用引用外部函数库)
加解密:RSA公钥加密,私钥解密 签名验签:RSA私钥签名,公钥验签
直接上代码
const getKey = async () => {
const key = await window.crypto.subtle.generateKey({ name: 'RSA-OAEP', modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01]), hash: { name: 'SHA-512' } }, true, [
'encrypt',
'decrypt',
]);
const privateKey = await window.crypto.subtle.exportKey('pkcs8', key.privateKey);
const publicKey = await window.crypto.subtle.exportKey('spki', key.publicKey);
console.log('privateKey===>', privateKey); //生成的是ArrayBufer对象
console.log('publicKey===>', publicKey); //生成的是ArrayBufer对象
const reader = new FileReader();
reader.readAsBinaryString(new Blob([privateKey]));
reader.onload = () => {
console.log(window.btoa(reader.result as string)); //秘钥以文本的形式输出
};
};
注意生成私钥的pkcs8,这里是私钥的填充值,如果在验签过程中使用的是其他类型的填充值可能出验签失败,(window.crypto.subtle.exportKey对象提供的填充值类型貌似并不全,没有其他pkcs类型的填充值)