调用Utilities.computeRsaSha256Signature时遇无效参数密钥错误求助
分析Google Apps Script中
Utilities.computeRsaSha256Signature的密钥错误 问题重现
用户在code.gs中编写的代码:
let privatekey = 'IcA3+ZwPmUMtAou4f9hJMg=='; var key = `-----BEGIN PRIVATE KEY-----\n${privatekey}\n-----END PRIVATE KEY-----\n`; console.log(key) var signature = Utilities.computeRsaSha256Signature("this is my input", key); Logger.log(signature);
控制台输出的密钥内容:
-----BEGIN PRIVATE KEY----- IcA3+ZwEmUMtAou4f9hHMg== -----END PRIVATE KEY-----
报错信息:
Exception: Invalid argument: key
错误原因
- 你使用的私钥是残缺的Base64片段,长度远不足以构成有效的RSA私钥。标准RSA私钥(PKCS#8格式)需要包含完整的密钥结构信息(如模数、私钥指数、公钥指数等),不是一段短Base64字符串就能被识别。
Utilities.computeRsaSha256Signature对输入的私钥有严格要求:必须是完整的PKCS#8格式RSA私钥,且Base64编码无错误、无截断。当前的密钥内容无法被解析为合法的RSA私钥,因此触发"Invalid argument: key"错误。
解决步骤
- 生成完整的PKCS#8格式RSA私钥:
使用OpenSSL工具生成,示例命令:# 生成原始RSA私钥 openssl genrsa -out private_key.pem 2048 # 转换为PKCS#8格式(无密码保护) openssl pkcs8 -topk8 -inform PEM -outform PEM -in private_key.pem -out private_key_pkcs8.pem -nocrypt - 复制完整私钥到代码:
打开生成的private_key_pkcs8.pem,将-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----之间的所有Base64内容完整复制到代码的privatekey变量中,确保保留所有换行或用\n替换。 - 验证密钥格式:
确保密钥没有多余空格、截断或编码错误,控制台输出的密钥内容应与生成的pem文件完全一致。
内容的提问来源于stack exchange,提问作者Shiv Yadav
相关产品推荐
相关产品推荐

