我使用此C#方法将私钥作为字符串发送到javascript:
public static string SignData(string certPath,string certPass)
{
X509Certificate2 keyStore = new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory + "Certifikatat\\" + certPath, certPass, X509KeyStorageFlags.Exportable);
RSA privateKey = keyStore.GetRSAPrivateKey();
TextWriter textWriter = new StringWriter();
var eky = DotNetUtilities.GetRsaKeyPair(privateKey);
PemWriter pemWriter = new PemWriter(textWriter);
pemWriter.WriteObject(eky);
pemWriter.Writer.Flush();
return pemWriter.Writer.ToString();
}
现在我需要将字符串转换为CryptoKey
,以便用于对一些数据进行签名.
window.crypto.subtle.importKey(
"pkcs8",
pemToArrayBuffer(pk),
{
name: "RSASSA-PKCS1-v1_5",
hash: { name: "SHA-256" },
},
false,
["sign"]
)
.then(function (publicKey) {
//returns a publicKey (or privateKey if you are importing a private key)
console.log(publicKey);
})
.catch(function (err) {
console.error(err);
});
}
function removeLines(str) {
str = str.replace("\r", "");
return str.replace("\n", "");
}
function base64ToArrayBuffer(b64) {
var byteString = btoa(b64);
var byteArray = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
byteArray[i] = byteString.charCodeAt(i);
}
return byteArray;
}
function pemToArrayBuffer(pem) {
var b64Lines = removeLines(pem);
var b64Prefix = b64Lines.replace('-----BEGIN RSA PRIVATE KEY-----', '');
var b64Final = b64Prefix.replace('----- END RSA PRIVATE KEY-----', '');
return base64ToArrayBuffer(b64Final);
}
pk
是rsa对密钥,现在我需要转换它以便用于:
var signature = window.crypto.subtle.sign("RSA_PKCS1_SHA256", pks, bytes);
pks
应该是pk
字符串生成的CryptoKey
.