HarmonyOS 鸿蒙Next RSA签名验签无法通过
HarmonyOS 鸿蒙Next RSA签名验签无法通过
在鸿蒙中,验签无法通过,代码如下:
export async function checkSign(plainText: Uint8Array, signMessage: Uint8Array): Promise<boolean> {
let verifyAlg = "RSA2048|PKCS1|SHA256";
let verifier = crypto.createVerify(verifyAlg);
await verifier.init(await getPublicKey());
let textSplitLen = 64; // 自定义的数据拆分长度,此处取64
for (let i = 0; i < plainText.length; i += textSplitLen) {
let updateMessage = plainText.subarray(i, i + textSplitLen);
let updateMessageBlob: crypto.DataBlob = { data: updateMessage };
// 分段update
await verifier.update(updateMessageBlob);
}
// 已通过分段传入所有明文,故此处verify第一个参数传入null
let res = await verifier.verify(null, { data: signMessage });
console.info("verify result is " + res);
return res;
}
更多关于HarmonyOS 鸿蒙Next RSA签名验签无法通过的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
传入的公钥是base64编码的,需要转换为Uint8Array
,然后包装为DataBlob
类型。
参考示例代码如下:
async function verifyMessagBySegment(pubKey: cryptoFramework.PubKey, plainText: Uint8Array, signMessageBlob: cryptoFramework.DataBlob) {
let verifyAlg = "RSA2048|PKCS1|SHA256";
let verifier = cryptoFramework.createVerify(verifyAlg);
await verifier.init(pubKey);
let textSplitLen = 64; // 自定义的数据拆分长度,此处取64
for (let i = 0; i < plainText.length; i += textSplitLen) {
let updateMessage = plainText.subarray(i, i + textSplitLen);
let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage };
// 分段update
await verifier.update(updateMessageBlob);
}
// 已通过分段传入所有明文,故此处verify第一个参数传入null
let res = await verifier.verify(null, signMessageBlob);
console.info("verify result is " + res);
return res;
}
async function rsaSignatureBySegment() {
let message = "客户端请求报文验签失败!checkVersion";
let pubKeyStr = "";
// 初始化Base64工具实例
let base64Helper = new util.Base64Helper();
// 公钥转换为Uint8Array,然后包装为DataBlob类型
let pubKeyBlob: cryptoFramework.DataBlob = { data: base64Helper.decodeSync(pubKeyStr) };
let keyGenAlg = "RSA2048";
let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg);
// 将公钥包装数据pubKeyBlob转换成密钥对类型KeyPair
let keyPair = await generator.convertKey(pubKeyBlob, null);
let messageData = new Uint8Array(buffer.from(message, 'utf-8').buffer);
let s='xxx'
let signData: cryptoFramework.DataBlob = { data: base64Helper.decodeSync(s) };
let verifyResult = await verifyMessagBySegment(keyPair.pubKey, messageData, signData);
if (verifyResult == true) {
console.info('verify success');
} else {
console.error('verify failed');
}
}
更多关于HarmonyOS 鸿蒙Next RSA签名验签无法通过的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS(鸿蒙)Next RSA签名验签无法通过的问题,以下是一些可能的解决方案:
-
检查密钥对:
- 确保使用的公钥和私钥是正确匹配的。
- 检查密钥是否损坏或格式不正确。
-
验证算法和填充模式:
- 确认签名和验签时使用的算法(如RSA/SHA-256)和填充模式(如PKCS#1)是否一致。
-
检查数据完整性:
- 确保待签名的数据在签名和验签过程中保持一致,未发生任何修改。
-
更新鸿蒙系统:
- 检查并更新鸿蒙系统到最新版本,以确保所有安全组件和算法库都是最新的。
-
检查API使用:
- 确认使用的鸿蒙API是否正确,参数是否传递正确。
- 查阅鸿蒙官方文档,确保API的使用符合规范。
-
调试和日志:
- 开启详细的日志记录,检查签名和验签过程中的错误信息和异常。
- 使用调试工具逐步跟踪代码,查找问题所在。
如果经过上述步骤后问题依旧无法解决,请联系官网客服。官网地址是:https://www.itying.com/category-93-b0.html