HarmonyOS 鸿蒙Next RSA公钥满足标准,生成密钥对报错
HarmonyOS 鸿蒙Next RSA公钥满足标准,生成密钥对报错
publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDSL6iHVQbZBg+bV1WKYhuZcMKzPGOFc4sQyGPyjdJcgMniin6wELa5CPvPgMRv45RCKSRZYcIZ2J4O/cGKZqG2HxD9Wv0FfGHLGLOaGKH2fcDbYb4b2O0FrFqEzXFSsRiaeFbBSw6w0mgR0sK5NTHy+RghzEuaD/ZEpdjT5TTJwIDAQAB'
convertAsyKey() {
let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
let pkVal = this.stringToUint8Array(this.publicKey);
let pkBlob: cryptoFramework.DataBlob = { data: pkVal };
rsaGenerator.convertKey(pkBlob, null, (err, keyPair) => {
if (err) {
AlertDialog.show({ message: 'Convert keyPair fail' });
return;
}
AlertDialog.show({ message: 'Convert keyPair success' });
})
}
stringToUint8Array(str: string): Uint8Array {
let arr = new Uint8Array(str.length);
for (let i = 0, j = str.length; i < j; ++i) {
arr[i] = str.charCodeAt(i);
}
return arr;
}
更多关于HarmonyOS 鸿蒙Next RSA公钥满足标准,生成密钥对报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
上述的密钥是pem格式的,需要转化为der格式,需要转化之后再传入convertkey
正确的核心代码块应该是:
let rsaGenerator = cryptoFramework.createAsyKeyGenerator(‘RSA1024’);
let pkBlob :cryptoFramework.DataBlob;
let base64 = new util.Base64Helper();
pkBlob = { data: base64.decodeSync(this.publicKey) };
rsaGenerator.convertKey(pkBlob, null, (err, keyPair) => {
if (err) {
AlertDialog.show({ message: ‘Convert keyPair fail’ });
return;
}
AlertDialog.show({ message: ‘Convert keyPair success’ });
})
附:PEM转换为DER格式的方法是去掉PEM文件首尾----BEGIN xxx----和----END xxx----两行,然后将内容合并为一行,最后将内容进行 Base64 解码,就可以的到DER格式
更多关于HarmonyOS 鸿蒙Next RSA公钥满足标准,生成密钥对报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
import cryptoFramework from '@ohos.security.cryptoFramework'
import util from '@ohos.util'
import { Callback } from '@ohos.base';
let RSA_PUBLIC_KEY: string = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvbXcFbMCNaW84NdxeP3cZblJ//wKR4BXB6d1yFuCn1yzl8hlhqLS67RHqYBKDjcY5SXjKNLeEzyFBfBayij+GYODa0ozgFZN5KvwJM+k3WRtl3dTgWF3oxMLnzI/pdrgEyz3s22YTttCRJdrS/qMl4Onfh/jw1MUIOXhjXMYC+bXeGj7hUdKQr1/lMtkiI9x+iE/eCYSYS1e6bX5gpSy8kMJmbZjpqknEb7AukH4UWP4HH2rHCTAeTqW0RSYKm1q07ywmYPqPrDdPUCrehpOnzz8lgHZqq1UdW3vREX50p+QXfbbBSRp5cPBOE7dy069sjnA0HavsrGyKwicm2AITwIDAQAB"
/**
* RSA非对称加密工具
* wy
*/
export class RsaUtils {
static rsa(password: string, callBack: Callback<string>) {
let base64 = new util.Base64Helper();
let data = base64.decodeSync(RSA_PUBLIC_KEY);
let rsaGenerator: cryptoFramework.AsyKeyGenerator;
rsaGenerator = cryptoFramework.createAsyKeyGenerator("RSA1024|PRIMES_2");
let cipher = cryptoFramework.createCipher("RSA1024|PKCS1");
let blob: cryptoFramework.DataBlob = { data: data };
let now = Date.parse(new Date().toString());
rsaGenerator.convertKey(blob, null)
.then(keyPair => {
let pubKey = keyPair.pubKey;
cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, pubKey, null, (err, data) => {
let plainText = password;
let input: cryptoFramework.DataBlob = { data: RsaUtils.stringToUint8Array(plainText) };
cipher.doFinal(input, (err, data) => {
if (data) {
let final = (base64.encodeToStringSync(data.data))
callBack(final)
console.log("wywy:", final)
}
});
});
})
.catch(err => {
});
}
static stringToUint8Array(str: string): Uint8Array {
let arr: Array<number> = [];
for (let i = 0, j = str.length; i < j; i++) {
arr.push(str.charCodeAt(i));
}
return new Uint8Array(arr);
}
}
用我的试试,把公钥换成你的
针对“HarmonyOS 鸿蒙Next RSA公钥满足标准,生成密钥对报错”的问题,以下是一些可能的解决方案,不涉及Java或C语言内容:
在HarmonyOS中生成RSA密钥对时,如果遇到报错,首先需要确认以下几点:
-
密钥长度:确保你使用的密钥长度符合HarmonyOS的安全标准。常见的RSA密钥长度有1024位、2048位等,但更长的密钥长度可能提供更好的安全性。检查你的代码中是否指定了合适的密钥长度。
-
算法参数:验证你的算法参数设置是否正确。例如,公钥和私钥的指数、模数等参数是否符合RSA算法的要求。
-
API调用:检查你调用的API是否正确。HarmonyOS提供了专门的API用于生成密钥对,确保你使用的是这些API,并且传递的参数正确无误。
-
权限问题:在HarmonyOS中,生成密钥对可能需要特定的权限。检查你的应用是否已经声明了必要的权限。
-
环境配置:确认你的开发环境已经正确配置,包括所有必要的库和依赖项。
如果上述步骤都无法解决问题,可能是更深层次的系统或配置问题。此时,建议直接联系HarmonyOS的官方客服以获取更专业的帮助。
如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html,