HarmonyOS 鸿蒙Next RSA公钥解密,注意是公钥解密
HarmonyOS 鸿蒙Next RSA公钥解密,注意是公钥解密 在官网上没有找到RSA公钥解密的代码,其他网站也基本没有,求一份RSA公钥解密的代码,注意是公钥解密
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer, util } from '@kit.ArkTS';
@Entry
@Component
struct RSAReverseCrypto {
@State message: string = '点击开始';
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
RsaReverse()
})
}
.width('100%')
}
.height('100%')
}
}
// 字符串转成字节流
export function stringToUint8Array(str: string) {
return new Uint8Array(buffer.from(str,'utf-8').buffer);
}
// Uint8Array转成String
function uint8ArrayToString(input: Uint8Array): string {
let textDecoder = util.TextDecoder.create('utf-8');
return textDecoder.decodeWithStream(input);
}
// 公钥解密
function verifyMessage(pubKey: cryptoFramework.PubKey,signMessageBlob: cryptoFramework.DataBlob) {
let verifyAlg = "RSA2048|PKCS1|NoHash|Recover";
let verifier = cryptoFramework.createVerify(verifyAlg);
verifier.initSync(pubKey);
let rawSignData = verifier.recoverSync(signMessageBlob);
console.log("rsa puk data " + uint8ArrayToString(rawSignData?.data))
return rawSignData;
}
//私钥加密
function signMessage(priKey: cryptoFramework.PriKey, plainText:cryptoFramework.DataBlob) {
let signAlg = "RSA2048|PKCS1|NoHash|OnlySign";
let signer = cryptoFramework.createSign(signAlg);
signer.initSync(priKey);
let signData = signer.signSync({data:stringToUint8Array("私钥加密")});
return signData;
}
// 密钥转换
function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
let keyPair = rsaGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
console.info('convertKey success');
return keyPair;
}
//Rsa 加解密
function RsaReverse() {
let pkData = "xxxx";
let skData = "xxxx"/*new Uint8Array()*/;
let base64 = new util.Base64Helper();
let pubKeyBlob = base64.decodeSync(pkData)
let priKeyBlob = base64.decodeSync(skData);
let keyPair = genKeyPairByData(pubKeyBlob, priKeyBlob);
let pubKey = keyPair.pubKey
let priKey = keyPair.priKey
let message = "This is a test";
let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
let encryptText = signMessage(priKey, plainText);
let decryptText = verifyMessage(pubKey, encryptText);
// console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8'));
/*if (plainText.data.toString() === decryptText.data.toString()) {
console.info('decrypt ok');
} else {
console.error('decrypt failed');
}*/
}
更多关于HarmonyOS 鸿蒙Next RSA公钥解密,注意是公钥解密的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你的skData是啥呢,如果服务端只提供了pkData,怎么办,
在HarmonyOS(鸿蒙)系统中,关于RSA公钥解密的问题,首先需要明确的是,在传统的RSA加密体系中,公钥主要用于加密数据,而私钥用于解密数据。这是基于公钥加密体系(PKI)的基本原则,旨在确保数据的安全性。
然而,如果你确实需要在鸿蒙系统中实现所谓的“公钥解密”功能,这很可能意味着你需要采用某种特殊的加密模式或协议,这并非标准RSA操作。在标准RSA算法中,公钥解密在技术上是不可能的,因为公钥和私钥在数学上是成对出现的,各自承担不同的角色。
如果你是在尝试实现某种特定的安全通信协议,可能需要考虑使用其他加密算法或协议,或者重新设计你的加密方案,以确保它既符合安全标准,又能满足你的特定需求。
在鸿蒙系统中,你可以利用系统提供的加密库或API来实现标准的RSA加密和解密操作。如果你需要实现非标准的“公钥解密”功能,可能需要深入研究相关的加密算法和协议,或者寻求专业的安全咨询。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html