HarmonyOS 鸿蒙Next RSA签名

发布于 1周前 作者 htzhanglong 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next RSA签名

1.android rsa 签名如下,服务器端能正常通过
public static String sign(Map< String, Object > params) {
try {
PKCS8EncodedKeySpecpriPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey, Base64.DEFAULT));
KeyFactorykeyf = KeyFactory.getInstance(“RSA”);
PrivateKeypriKey = keyf.generatePrivate(priPKCS8);
java.security.Signaturesignature = java.security.Signature.getInstance(SIGN_RSA2_ALGORITHMS);
signature.initSign(priKey);
signature.update(getSignCheckContent(params).getBytes(“utf-8”));
byte[] signed = signature.sign();
return Base64.encodeToString(signed, Base64.DEFAULT);
} catch (Exception e) {
throw new RuntimeException(“RSAcontent”, e);
}
}

2.鸿蒙端代码如下,签名成功,但是服务器端不能通过

export function signMessagePromise(params: Map<string, string>, key: string): Promise<string> {
return new Promise((resolve, reject) => {
let data = getSignCheckContent(params)
let dataArray: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(data, ‘utf-8’).buffer) };
let keyArray: cryptoFramework.DataBlob = { data: Base64Util.decodeSync(key) };
let rsaGenerator = cryptoFramework.createAsyKeyGenerator(“RSA1024|PRIMES_2”);
let signer = cryptoFramework.createSign(“RSA1024|PKCS1|SHA1”)
let keyGenPromise = rsaGenerator.generateKeyPair();
keyGenPromise.then(keyPair => {
let globalKeyPair = keyPair;
let priKey = globalKeyPair.priKey;
return signer.init(priKey);
})
.then(() => {
return signer.update(keyArray);
})
.then(() => {
return signer.sign(dataArray);
})
.then((dataBlob: cryptoFramework.DataBlob) => {
// return dataBlob.data.toLocaleString() 
let result = dataBlob.data.toLocaleString();
resolve(result)
})
.catch((error: BusinessError) => {
Logger.debug(“error”, JSON.stringify(error))
reject(error)
});
});
}

2 回复

你在鸿蒙侧签名使用的是随机秘钥 : let keyGenPromise = rsaGenerator.generateKeyPair();  

使用服务端一样的秘钥试下

HarmonyOS 鸿蒙Next RSA签名是确保数据完整性和真实性的重要手段。以下是对HarmonyOS 鸿蒙Next RSA签名的专业说明:

一、RSA签名原理

在HarmonyOS 鸿蒙Next中,RSA签名基于公钥和私钥的非对称加密体系。发送方使用私钥对数据进行签名,接收方则使用公钥验证签名。签名过程包含数据的特征信息和发送方的身份标识,确保数据在传输过程中不被篡改,并确认发送方的身份。

二、签名流程

  1. 生成RSA密钥对:使用HarmonyOS提供的密钥生成工具或API生成RSA密钥对。
  2. 创建Sign实例:指定填充模式(如PKCS1)和摘要算法(如SHA256),创建Sign实例。
  3. 初始化Sign实例:使用私钥初始化Sign实例。
  4. 更新待签名数据:将待签名的数据传入Sign实例。
  5. 生成签名:调用Sign实例的签名方法生成签名。

三、注意事项

  • 确保使用的填充模式和摘要算法与接收方一致。
  • 签名数据的长度需满足特定要求,如PKCS1填充模式下数据长度需小于RSA钥模-11。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部